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);
}
첫 번째 부분은 행을 선택할 때 내 텍스트 상자를 업데이트합니다. 두 번째 부분은 이벤트 처리기에서의 시도입니다. 키보드로 그리드를 탐색하여 텍스트 상자를 업데이트하려고합니다. 따라서 파란색으로 강조 표시된 행이 자동으로 텍스트 상자에 채워집니다.화살표 키를 사용하여 DataGridView를 탐색하여 텍스트 상자를 업데이트하십시오.
dataGridViewCargo_CellContentClick에 포함시켜 이벤트 처리기를 호출하려고했지만 발신자와 전자가 전달되지 않고 매개 변수 개수 불일치 오류가 발생하거나 인스턴스 메소드에 대한 위임자가 'this'를 가질 수 없습니다. 이 아이디어는 버튼을 눌러 CellContentClick 이벤트를 호출하는 것이 었습니다.
도움이 매우 친절 할 것입니다.
CellContentClick은 실제로 실제 콘텐츠를 치기 때문에 나쁜 선택입니다. 왜 ProcessCmdKey를 사용해야합니까? dgv는 disbelled하지 않는 한 그 자체로 모든 것을해야합니다. CurrentCellChanged 이벤트를 코딩하면됩니다! – TaW