【发布时间】:2016-09-20 21:16:08
【问题描述】:
public delegate void MyEventHandler(object sender, DataGridViewCellEventArgs e);
public event MyEventHandler SomethingHappened;
private void dataGridViewCargo_CellContentClick_1(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex >= 0)
{
DataGridViewRow rowID = this.dataGridViewCargo.Rows[e.RowIndex];
cargoDisplayMessageIdTextBox.Text = rowID.Cells["iDDataGridViewTextBoxColumn"].Value.ToString();
DataGridViewRow rowSender = this.dataGridViewCargo.Rows[e.RowIndex];
cargoDisplaySubjectTextBox.Text = rowSender.Cells["subjectDataGridViewTextBoxColumn"].Value.ToString();
}
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
Invoke(new MyEventHandler(SomethingHappened));
return base.ProcessCmdKey(ref msg, keyData);
}
当我选择行时,第一部分会更新我的文本框。第二部分是对事件处理程序的尝试。我想通过使用键盘导航网格来更新文本框。因此,无论以蓝色突出显示的行都会自动填充文本框。
我尝试通过将事件处理程序包含在 dataGridViewCargo_CellContentClick 中来调用它,但 sender 和 e 没有通过,并且我收到参数计数不匹配错误或委托给实例方法不能有 null 'this'。这个想法是通过按下按钮来调用 CellContentClick 事件。
任何帮助都会非常友好。
【问题讨论】:
-
CellContentClick 是一个糟糕的选择,因为您必须点击实际内容。为什么你必须 ProcessCmdKey? dgv 应该自己做所有的事情,除非它被禁用。只需编写 CurrentCellChanged 事件!
标签: c# winforms datagridview textbox keydown