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

6
我有一个 DataGridView。在一些单元格中,我添加了一些数据。如果我当前正在编辑的单元格为空并且我即将离开它,则会向用户显示消息“bla-bla-bla”,并且处于编辑模式的单元格必须重新获得焦点。
为了实现这一点,我使用了 CellEnterCellLeaveCellEndEdit等事件,并希望在检查单元格中输入的值后取消这些事件。但是我是新手,它不起作用。请帮帮我。希望看到任何建议。
下面是我的代码变量。我尝试使用其他事件,但那很天真。
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];
    }
}

请展示您的代码,以便我们可以基于它来提供帮助。 - HichemSeeSharp
@cppanda >这需要通过编程来解决吗?是的。 - Dima
所以你想要的是,如果用户输入的值不是你认为的“可接受的值”,就不让用户退出编辑模式? - Luis Quijada
@Luis Quijada 是的,没错。 - Dima
2个回答

8

我认为您必须基于 DataGridViewCellValidating 事件寻找解决方案。

该事件会在 DataGridView 即将退出编辑模式时触发,允许您拒绝用户输入的值。要拒绝输入的值,在事件处理程序的代码中,您必须将 e.Cancel 设置为 True

private void dataGridView1_CellValidating(object sender,
    DataGridViewCellValidatingEventArgs e)
{

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

        MessageBox.Show("Not Valid!");
    }
}

网络上有很多例子,其中一个可以直接在MSDNDataGridViewCellValidatingEventArgs文档中找到。 还要查看属性DataGridViewCellValidatingEventArgs.FormattedValue的文档

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


0

你无法禁用特定单元格或行的 DataGrids CellEnter CellLeave 事件。

你可以存储一个空 / 不应调用进入/离开事件的单元格列表,并在执行 CellEnter / CellLeave 操作之前检查该单元格是否在已禁用单元格列表中。


1
我会考虑的。谢谢。 - Dima

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接