WinForm C# 如何为动态创建的DataGridView控件绑定事件方法
解决步骤
1. 修正事件处理方法的签名
.NET 控件的事件处理程序需要符合标准委托签名,必须包含**触发事件的控件实例(sender)和事件参数(e)**两个参数,同时建议不要用Action作为方法名(和.NET内置委托重名容易引发歧义),修改后的代码如下:
private void OnDataGridViewCellMouseClick(object sender, DataGridViewCellMouseEventArgs e) { // 如果需要获取当前触发事件的DataGridView实例,可通过sender转换 DataGridView currentDgv = sender as DataGridView; // 原有业务逻辑 if(e.RowIndex == 2) { MessageBox.Show("Hello"); } }
2. 在动态创建控件的逻辑中添加事件绑定
在初始化panGridView的代码末尾,直接添加事件订阅即可,修改后的Example方法如下:
public void Example(TabControl tab) { // 注意原代码的循环边界有问题:原写法i<tab.TabCount,每次循环TabCount会自增会导致死循环,这里替换为你实际需要创建的标签页数量即可 for(int i=0; i < 预期创建的标签页数量; i++) { tab.TabPages.Add("Panneau " + tab.TabCount); DataGridView panGridView = new DataGridView(); panGridView.Name = "panGridView_" + tab.TabCount; panGridView.Location = new System.Drawing.Point(0, 0); panGridView.RowTemplate.Height = 24; panGridView.Size = new System.Drawing.Size(1375, 458); panGridView.Columns.Add("id", "id"); panGridView.Columns.Add("part_code", "part_code"); panGridView.Columns[0].Width = 100; panGridView.Columns[1].Width = 150; panGridView.Visible = true; panIndex.Items.Add(tab.TabCount - 1); tab.TabPages[tab.TabCount - 1].Controls.Add(panGridView); // 新增事件绑定代码 panGridView.CellMouseClick += OnDataGridViewCellMouseClick; } }
扩展说明
- 如果需要绑定其他事件(比如单元格双击、行添加、单元格值变更等),只需替换对应事件名,同时调整事件处理方法的第二个参数的类型即可,比如绑定
CellValueChanged事件就把处理方法的第二个参数改为DataGridViewCellEventArgs。 - 所有动态生成的DataGridView会共用同一个事件处理方法,通过
sender参数即可区分不同的控件实例,实现差异化逻辑。
内容的提问来源于stack exchange,提问作者user17020926
相关产品推荐
相关产品推荐

