C#动态DataGridViewCell点击事件
C# Dynamic DataGridViewCell Click Event
我要单击一个 DGV,并根据此单击类型创建另一个 DGV 并显示在屏幕上以用于特殊工作目的。在其他 DGV 的创建过程中,一些单元格(一些行列逻辑)将通过程序代码自动单击。下面的代码执行此操作的 AUTO CLICK 代码部分。但我相信必须有另一种方法(如 Button PerformClick Event Fire)来实现此点击操作:
DataGridViewCell dc;
dc = MyDataGridView[0, 0];
Rectangle rect = this.MyDataGridView.GetCellDisplayRectangle(0, 0, true);
MouseButtons b = new MouseButtons();
MouseEventArgs mev = new MouseEventArgs(b, 1, rect.X, rect.Y, 1);
DataGridViewCellMouseEventArgs e = new DataGridViewCellMouseEventArgs(0, 0, rect.X + 2, rect.Y + 2, mev);
MyDataGridView_CellMouseClick(dgvEntegCompany, e);
问题不是很清楚。您只是在寻找 CellClick
活动吗?
编辑:那么您需要执行 CellClick 的 content 吗? CellClick 是一个事件,因此它在单元格单击事件发生时触发。它可以包含 对方法的调用,如果您愿意,您也可以独立地“动态”调用该方法。
// CellClick event
private void dgItems_CellClick(object sender, DataGridViewCellEventArgs e)
{
MyMessage(e.RowIndex, e.ColumnIndex);
}
// A user method
private void MyMessage(Int32 irow, Int32 icol)
{
System.Windows.Forms.MessageBox.Show("A cell [" + irow + ", " + icol + "] was clicked!");
}
// invoking from a button
private void button1_Click(object sender, EventArgs e)
{
MyMessage(this.dgItems.SelectedCells[0].RowIndex, this.dgItems.SelectedCells[0].ColumnIndex );
}
编辑 2:
没有 AUTOCLICK 这样的东西。
- 如果您想在预期事件中执行代码,请参阅上面的代码
- 如果您想执行视觉更改,例如 select 一个单元格,那就去做吧。请注意,此操作取决于
SelectionMode
的设置,例如 Cell
和 FullRowSelect
的行为方式不同。它会是这样的:
this.DataGridView1.ClearSelection();
this.DataGridView1.Rows[0].Cells[3].Selected = True;
- 如果您正在寻找调用动作的方法(又名计算机 AI 播放器),您很可能必须研究多线程,即
BackgroundWorker
并创建一个单独的线程来控制game/simulation/etc。那么这个问题还很遥远
备注:你必须更好地表达你的问题,这意味着要付出更多的努力来撰写它。你这样做只是在浪费社区时间。
我假设这就是你的意思……
”Fire Event Code for DataGridView Cell Click At Any Column – Row”
…是否要订阅网格事件,当用户“点击”网格中的任何单元格时将触发该事件。
如果是这种情况……那么,订阅网格 CellClick
或 CellMouseClick
事件。
如果你想订阅grids CellMouseClick
事件,那么可以在设计器中完成相关代码,或者你可以在InitializeComponent();
方法之后的表单构造函数中添加代码调用它看起来像……
dataGridView1.CellMouseClick += new DataGridViewCellMouseEventHandler(dataGridView1_CellMouseClick);
然后您需要创建事件处理程序方法...dataGridView1_CellMouseClick.
在这个事件中您可以检查 DataGridViewCellMouseEventArgs
对象以查看单击了哪个单元格。该对象具有 属性 用于单击单元格的行索引和列索引。下面是一个例子。
private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) {
// This event will fire whenever a user clicks on a cell
// we can get the row and column index of the "clicked" cell
MessageBox.Show("Cell at Row: " + e.RowIndex + " Col: " + e.ColumnIndex + " was clicked");
}
每次用户单击网格中的单元格时都会触发此事件。
目前还不清楚您究竟想用当前代码完成什么。
即使是这两行代码也可以执行所需的操作:
DataGridViewCellEventArgs e = new DataGridViewCellEventArgs(ColIdx, RowIdx);
MyDataGridvView_CellClick(myDGV, e);
我要单击一个 DGV,并根据此单击类型创建另一个 DGV 并显示在屏幕上以用于特殊工作目的。在其他 DGV 的创建过程中,一些单元格(一些行列逻辑)将通过程序代码自动单击。下面的代码执行此操作的 AUTO CLICK 代码部分。但我相信必须有另一种方法(如 Button PerformClick Event Fire)来实现此点击操作:
DataGridViewCell dc;
dc = MyDataGridView[0, 0];
Rectangle rect = this.MyDataGridView.GetCellDisplayRectangle(0, 0, true);
MouseButtons b = new MouseButtons();
MouseEventArgs mev = new MouseEventArgs(b, 1, rect.X, rect.Y, 1);
DataGridViewCellMouseEventArgs e = new DataGridViewCellMouseEventArgs(0, 0, rect.X + 2, rect.Y + 2, mev);
MyDataGridView_CellMouseClick(dgvEntegCompany, e);
问题不是很清楚。您只是在寻找 CellClick
活动吗?
编辑:那么您需要执行 CellClick 的 content 吗? CellClick 是一个事件,因此它在单元格单击事件发生时触发。它可以包含 对方法的调用,如果您愿意,您也可以独立地“动态”调用该方法。
// CellClick event
private void dgItems_CellClick(object sender, DataGridViewCellEventArgs e)
{
MyMessage(e.RowIndex, e.ColumnIndex);
}
// A user method
private void MyMessage(Int32 irow, Int32 icol)
{
System.Windows.Forms.MessageBox.Show("A cell [" + irow + ", " + icol + "] was clicked!");
}
// invoking from a button
private void button1_Click(object sender, EventArgs e)
{
MyMessage(this.dgItems.SelectedCells[0].RowIndex, this.dgItems.SelectedCells[0].ColumnIndex );
}
编辑 2:
没有 AUTOCLICK 这样的东西。
- 如果您想在预期事件中执行代码,请参阅上面的代码
- 如果您想执行视觉更改,例如 select 一个单元格,那就去做吧。请注意,此操作取决于
SelectionMode
的设置,例如Cell
和FullRowSelect
的行为方式不同。它会是这样的:
this.DataGridView1.ClearSelection();
this.DataGridView1.Rows[0].Cells[3].Selected = True;
- 如果您正在寻找调用动作的方法(又名计算机 AI 播放器),您很可能必须研究多线程,即
BackgroundWorker
并创建一个单独的线程来控制game/simulation/etc。那么这个问题还很遥远
备注:你必须更好地表达你的问题,这意味着要付出更多的努力来撰写它。你这样做只是在浪费社区时间。
我假设这就是你的意思……
”Fire Event Code for DataGridView Cell Click At Any Column – Row”
…是否要订阅网格事件,当用户“点击”网格中的任何单元格时将触发该事件。
如果是这种情况……那么,订阅网格 CellClick
或 CellMouseClick
事件。
如果你想订阅grids CellMouseClick
事件,那么可以在设计器中完成相关代码,或者你可以在InitializeComponent();
方法之后的表单构造函数中添加代码调用它看起来像……
dataGridView1.CellMouseClick += new DataGridViewCellMouseEventHandler(dataGridView1_CellMouseClick);
然后您需要创建事件处理程序方法...dataGridView1_CellMouseClick.
在这个事件中您可以检查 DataGridViewCellMouseEventArgs
对象以查看单击了哪个单元格。该对象具有 属性 用于单击单元格的行索引和列索引。下面是一个例子。
private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) {
// This event will fire whenever a user clicks on a cell
// we can get the row and column index of the "clicked" cell
MessageBox.Show("Cell at Row: " + e.RowIndex + " Col: " + e.ColumnIndex + " was clicked");
}
每次用户单击网格中的单元格时都会触发此事件。
目前还不清楚您究竟想用当前代码完成什么。
即使是这两行代码也可以执行所需的操作:
DataGridViewCellEventArgs e = new DataGridViewCellEventArgs(ColIdx, RowIdx);
MyDataGridvView_CellClick(myDGV, e);