我正在处理Windows窗体。目前,我看起来非常头疼,看起来很简单。
我有一个datagridview,想要允许右键单击选择。因此,我创建了一个名为dataGridViewJobs_MouseDown的函数,该函数在datagridview上的MouseDown上引发:
private void dataGridViewJobs_MouseDown(object sender, MouseEventArgs e)
{
int curRowIdx = dataGridViewJobs.HitTest(e.Location.X, e.Location.Y).RowIndex;
if (curRowIdx != -1 && curRowIdx < dataGridViewJobs.Rows.Count)
{
dataGridViewJobs.CurrentCell = dataGridViewJobs[0, curRowIdx];
}
}
执行hitTest以查找单击的单元格的行索引。然后,datagridview的currentCell被设置为所述行中的第一个单元格。
这会导致引发SelectionChanged事件。这与以下功能相关:
private void dataGridViewJobs_SelectionChanged(object sender, EventArgs e)
{
if (dataGridViewJobs.Rows.Count > 0)
{
Console.WriteLine(dataGridViewJobs.CurrentCell.RowIndex);
}
}
这会将旧索引写入控制台。这是为什么?
我目前正在使用一种解决方法,这意味着我将hitTest的结果保存在全局变量中。但这不是正确的方法。
我做错了吗?提前谢谢!
答案 0 :(得分:1)
当您更改CurrentCell属性的值时, SelectionChanged事件发生在CurrentCellChanged事件之前。任何 SelectionChanged事件处理程序访问CurrentCell属性 这一次将获得以前的价值。
使用CurrentCellChanged
事件打印当前值