我需要使datagridview仅在keypress事件中仅接受特定列的数值。有什么最好的方法吗?

最佳答案

  • 添加一个EditingControlShowing
  • 事件
  • 在EditingControlShowing中,检查当前单元格是否位于所需的列中。
  • 在EditingControlShowing中注册KeyPress的新事件(如果上述条件为true)。
  • 删除先前在EditingControlShowing中添加的所有KeyPress事件。
  • 在KeyPress事件中,检查键是否不是数字,然后取消输入。

  • 例:
    private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        e.Control.KeyPress -= new KeyPressEventHandler(Column1_KeyPress);
        if (dataGridView1.CurrentCell.ColumnIndex == 0) //Desired Column
        {
            TextBox tb = e.Control as TextBox;
            if (tb != null)
            {
                tb.KeyPress += new KeyPressEventHandler(Column1_KeyPress);
            }
        }
    }
    
    private void Column1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
        {
            e.Handled = true;
        }
    }
    

    10-08 06:32