如果我使用Tab

时间:2017-03-02 12:17:47

标签: c# winforms datagridview cells

C#,WinForms。

也许这是一个愚蠢而琐碎的问题,但我无法离开! 我有一个DataGridView1有4列。我检查第1列中每一行的值是否与第2列中上一行的值相同。如果是,则MessageBox似乎通知我...我想将焦点带到刚输入双精度值的单元格。因此我写了这段代码:

private void DataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs cella)
{
    if (cella.RowIndex > 0 && cella.ColumnIndex == 1)
    {
        var PrevCell = DataGridView1.Rows[cella.RowIndex - 1].Cells[2].Value.ToString();
        if (DataGridView1.Rows[cella.RowIndex].Cells[cella.ColumnIndex].Value.ToString() == PrevCell)
        {
            MessageBox.Show("Amount already exists. Change the current value or the previous occurrence", "Double value, already inserted", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            DataGridView1.CurrentCell = DataGridView1.Rows[cella.RowIndex].Cells[cella.ColumnIndex];
            DataGridView1.BeginEdit(true);
            //only a test:
            //return;
            }
        }
    }
}

CurrentCell工作正常。问题是,当我按下CellEndEdit键移动到下一个单元格(或者我用鼠标点击下一个单元格)时,使用Tab事件执行此类控制,因此,甚至如果BeginEdit将我放在右侧单元格上让我编辑该值,只要再次按Tab键,它就会在下一个单元格中移动更改后的值。似乎在显示MessageBox之前按下的Tab保留在内存中。

当我写一个double值时,会出现MessageBox When I'm writing a double value, and MessageBox appears

当CurrentCell和BeginEdit引导我进入正确的单元格以更改double值时 When the CurrentCell and BeginEdit lead me in the correct cell to change the double value

活动结束时

At the end of the Event

关于如何处理问题的任何想法?

1 个答案:

答案 0 :(得分:1)

在发生CellEndEdit事件后,您需要选择单元格并调用BeginEdit方法。为此,请将该代码包装在BeginInvoke块中:

this.BeginInvoke(new Action(() => {
  DataGridView1.CurrentCell = DataGridView1.Rows[cella.RowIndex].Cells[cella.ColumnIndex];
  DataGridView1.BeginEdit(true);
}));