C# 如何验证DataGridView中单元格编辑控件的输入?

C# 如何验证DataGridView中单元格编辑控件的输入?,c#,.net,datagridview,C#,.net,Datagridview,看来,在DataGridView控件的单元格内捕获按键事件以便在用户输入时验证用户输入的唯一方法是使用DataGridView控件OneEdit ControlShowing事件,将一个方法连接到编辑控件的(e.control)按键事件,并进行一些验证 我的问题是,我构建了一堆自定义DataGridView列类,它们有自己的自定义单元格类型。这些单元格有自己的自定义编辑控件(如日期时间选择器和数字或货币文本框) 我想对那些将货币文本框的数字作为编辑控件但不是所有其他单元格类型的单元格进行数字验证

看来,在DataGridView控件的单元格内捕获按键事件以便在用户输入时验证用户输入的唯一方法是使用DataGridView控件OneEdit ControlShowing事件,将一个方法连接到编辑控件的(e.control)按键事件,并进行一些验证

我的问题是,我构建了一堆自定义DataGridView列类,它们有自己的自定义单元格类型。这些单元格有自己的自定义编辑控件(如日期时间选择器和数字或货币文本框)

我想对那些将货币文本框的数字作为编辑控件但不是所有其他单元格类型的单元格进行数字验证


如何在DataGridView的“OnEditControlShowing”覆盖中确定特定编辑控件是否需要一些数字验证?

如果我正确理解您的问题,您希望根据编辑控件的类型选择连接事件。如果是这样,我会这么做:

    private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        //Remove any KeyPress events already attached
        e.Control.KeyPress -= new KeyPressEventHandler(FirstEditingControl_KeyPress);
        e.Control.KeyPress -= new KeyPressEventHandler(SecondEditingControl_KeyPress);

        //Choose event to wire based on control type
        if (e.Control is NumericTextBox)
        {
            e.Control.KeyPress += new KeyPressEventHandler(FirstEditingControl_KeyPress);
        } else if (e.Control is CurrencyTextBox)
        {
            e.Control.KeyPress += new KeyPressEventHandler(SecondEditingControl_KeyPress);
        }
    }

我从经验中了解到,在DataGridView的编辑控件上取消任何可能的事件,因为它们将对多个单元格重复使用同一控件。

我也这么认为,但似乎编辑控件的类型始终是DataGridViewTextBoxEditingControl??