我无法点击 table 布局面板中的最后一个单元格
I can't click at last cell in table layout panel
当我想单击 tableLayoutPanel 中的最后一个单元格时遇到问题。
当我 运行 一个程序时,它看起来像这样:
enter image description here
接下来,当我点击我看到的最后一个单元格时,一切正常:
enter image description here
但是当我滚动 tableLayoutPanel 并单击最后一个单元格时,它不会标记最后一个单元格,而是在滚动 TLP 之前标记最后一个单元格。
这是我的代码:
private void tableLayoutPanel1_MouseClick(object sender, MouseEventArgs e)
{
row = 0;
int verticalOffset = 0;
foreach (int h in tableLayoutPanel1.GetRowHeights())
{
column = 0;
int horizontalOffset = 0;
foreach (int w in tableLayoutPanel1.GetColumnWidths())
{
Rectangle rectangle = new Rectangle(horizontalOffset, verticalOffset, w, h);
if (rectangle.Contains(e.Location))
{
if (column == 1) return;
Point cell = new Point(column, row);
if (!clickedCells.Contains(cell))
{
clickedCells.Add(cell);
}
else
{
clickedCells.Remove(cell);
}
tableLayoutPanel1.Invalidate();
MessageBox.Show(String.Format("row {0}, column {1} was clicked", row, column));
return;
}
horizontalOffset += w;
column++;
}
verticalOffset += h;
row++;
}
}
您需要在计算中包括滚动位置..:[=11=]
private void tableLayoutPanel1_MouseClick(object sender, MouseEventArgs e)
{
var asp = tableLayoutPanel1.AutoScrollPosition; // <<===
row = 0;
int verticalOffset = asp.Y; // <<===
foreach (int h in tableLayoutPanel1.GetRowHeights())
{
column = 0;
int horizontalOffset = asp.X; // <<===
foreach (int w in tableLayoutPanel1.GetColumnWidths())
{
Rectangle rectangle = new Rectangle(horizontalOffset, verticalOffset, w, h);
if (rectangle.Contains(e.Location))
{
if (column == 1) return;
Point cell = new Point(column, row);
if (!clickedCells.Contains(cell))
{ clickedCells.Add(cell); }
else
{ clickedCells.Remove(cell); }
tableLayoutPanel1.Invalidate();
MessageBox.Show(String.Format("row {0}, column {1} was clicked",
row, column));
return;
}
horizontalOffset += w;
column++;
}
verticalOffset += h;
row++;
}
}
当我想单击 tableLayoutPanel 中的最后一个单元格时遇到问题。 当我 运行 一个程序时,它看起来像这样: enter image description here
接下来,当我点击我看到的最后一个单元格时,一切正常: enter image description here
但是当我滚动 tableLayoutPanel 并单击最后一个单元格时,它不会标记最后一个单元格,而是在滚动 TLP 之前标记最后一个单元格。
这是我的代码:
private void tableLayoutPanel1_MouseClick(object sender, MouseEventArgs e)
{
row = 0;
int verticalOffset = 0;
foreach (int h in tableLayoutPanel1.GetRowHeights())
{
column = 0;
int horizontalOffset = 0;
foreach (int w in tableLayoutPanel1.GetColumnWidths())
{
Rectangle rectangle = new Rectangle(horizontalOffset, verticalOffset, w, h);
if (rectangle.Contains(e.Location))
{
if (column == 1) return;
Point cell = new Point(column, row);
if (!clickedCells.Contains(cell))
{
clickedCells.Add(cell);
}
else
{
clickedCells.Remove(cell);
}
tableLayoutPanel1.Invalidate();
MessageBox.Show(String.Format("row {0}, column {1} was clicked", row, column));
return;
}
horizontalOffset += w;
column++;
}
verticalOffset += h;
row++;
}
}
您需要在计算中包括滚动位置..:[=11=]
private void tableLayoutPanel1_MouseClick(object sender, MouseEventArgs e)
{
var asp = tableLayoutPanel1.AutoScrollPosition; // <<===
row = 0;
int verticalOffset = asp.Y; // <<===
foreach (int h in tableLayoutPanel1.GetRowHeights())
{
column = 0;
int horizontalOffset = asp.X; // <<===
foreach (int w in tableLayoutPanel1.GetColumnWidths())
{
Rectangle rectangle = new Rectangle(horizontalOffset, verticalOffset, w, h);
if (rectangle.Contains(e.Location))
{
if (column == 1) return;
Point cell = new Point(column, row);
if (!clickedCells.Contains(cell))
{ clickedCells.Add(cell); }
else
{ clickedCells.Remove(cell); }
tableLayoutPanel1.Invalidate();
MessageBox.Show(String.Format("row {0}, column {1} was clicked",
row, column));
return;
}
horizontalOffset += w;
column++;
}
verticalOffset += h;
row++;
}
}