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);
}
最初の部分では、行を選択するとテキストボックスが更新されます。 2番目の部分は、イベントハンドラの試行です。キーボードでグリッドを移動するだけで、テキストボックスを更新したいと思っています。したがって、どの行が青色で強調表示されていても、自動的にテキストボックスが作成されます。矢印キーでDataGridViewを操作してテキストボックスを更新します。
イベントハンドラをdataGridViewCargo_CellContentClickに含めることで呼び出そうとしましたが、送信者とeが通過せず、パラメータカウントの不一致エラーが発生するか、インスタンスメソッドへの代理人にnullがありません。そのアイデアは、ボタンを押してCellContentClickイベントを呼び出すことでした。
非常に親切です。
実際のコンテンツにヒットする必要があるため、CellContentClickは実際には悪い選択です。なぜあなたはProcessCmdKeyを持っていますか? dgvは、それが無効にされていない限り、すべてを処理する必要があります。 CurrentCellChangedイベントをコーディングするだけです! – TaW