如何在C#中取消CellEnter/CellLeave事件?

ste*_*ler 6 c# events datagridview

我有DataGridView.在某些单元格中,我添加了一些数据 如果我正在编辑的单元格是空的并且我即将离开它,则向用户显示消息"bla-bla-bla",并且处于编辑模式的单元必须接收焦点.

这样做的我用CellEnter,CellLeave,CellEndEdit等我想检查单元格中输入值后取消的事件.但我不是,它不起作用.请帮我.很高兴看到任何建议.

这是我的代码的变体.我试过其他事件,但这很天真.

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    if (dataGridView1[e.ColumnIndex, e.RowIndex] == null)
    {
        MessageBox.Show("Empty cell!");

        dataGridView1.CurrentCell = dataGridView1[e.ColumnIndex, e.RowIndex];
    }
}
Run Code Online (Sandbox Code Playgroud)

Lui*_*ada 7

我认为你必须根据CellValidating事件寻找解决方案DataGridView.

它即将在DataGridView即将离开编辑模式时触发,并允许您不接受用户输入的值.要拒绝输入的值,请在event-handler的代码中设置e.Cancelto True.

private void dataGridView1_CellValidating(object sender,
    DataGridViewCellValidatingEventArgs e)
{

    if (!IsValueValid(e.FormattedValue))
    {
        e.Cancel = true;

        MessageBox.Show("Not Valid!");
    }
}
Run Code Online (Sandbox Code Playgroud)

有在网上许多例子,一个可以直接的文档中找到DataGridViewCellValidatingEventArgsMSDN.另请参阅属性DataGridViewCellValidatingEventArgs.FormattedValue的文档

请注意,该方法IsValueValid(Object o)不是DataGridView组件的一部分,只是一个命名示例,您应该在代码中声明它并提供验证的主体.