【发布时间】:2021-12-22 21:25:34
【问题描述】:
在下面的代码中,我扩展了 DataGridViewTextBoxCell 类来控制用户将在此字段中输入的值,为此我需要捕获事件 KeyDown。但是只有当我使用键盘在 DGV 中导航时才会调用该事件。当我编辑单元格的值时,事件不会发生。我的代码中缺少什么?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
DataGridView dataGridView = new DataGridView();
MyDataGridViewColumn col = new MyDataGridViewColumn();
dataGridView.Columns.Add(col);
dataGridView.Rows.Add(new string[] { "0" });
dataGridView.Rows.Add(new string[] { "1" });
dataGridView.Rows.Add(new string[] { "2" });
dataGridView.Rows.Add(new string[] { "3" });
this.panel1.Controls.Add(dataGridView);
}
}
public class MyDataGridViewColumn : DataGridViewColumn
{
public MyDataGridViewColumn()
{
this.CellTemplate = new MyDataGridViewTextBoxCell();
}
}
public class MyDataGridViewTextBoxCell : DataGridViewTextBoxCell
{
protected override void OnKeyDown(KeyEventArgs e, int rowIndex)
{
base.OnKeyDown(e, rowIndex);
var key = e.KeyCode;
}
}
【问题讨论】:
-
尝试覆盖
InitializeEditingControl来订阅单元格的TextBox事件。 -
@Dmitry,感谢您的指示,但我不知道该怎么做。你有一些我可以看到如何做到这一点的例子吗?
-
目前还不清楚您到底要检查什么。您是否只想允许将某些键输入到文本框中,例如仅数字单元格或仅小数单元格?如果是这种情况,那么正如其他人所指出的那样,您想要订阅网格
EditingControlShowing事件。当单元格进入“编辑”模式时触发该事件。然后在这种情况下,您会将单元格转换为TextBox,然后订阅TextBoxes.KeyPress事件。但是,这将起作用;用户仍然可以将无效值“粘贴”到单元格中。因此需要做更多的工作。 -
以下链接……How to enter letters in one column cell of the table and only numbers in the other column cell?……演示了如何执行此操作并检查可能“粘贴”到单元格中的无效文本。
标签: c# winforms datagridview user-controls datagridviewtextboxcell