设计器相当于动态事件处理程序

时间:2017-08-30 22:37:23

标签: c# winforms datagridview

所以我有标签页面,其中datagridviews是在代码中动态创建的,并且在标签上获取鼠标按钮事件我这样做

Form1.Designer.cs

this.tabControl1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.OnTabMouseUp);

由于显而易见的原因,这不会与datagrids一起工作,因为它们是动态创建的,我没有直接访问它们所以访问代码我做了一些事情

Form1.cs的

tabControl1.SelectedTab.Controls.OfType<DataGridView>().First();

我认为在设计师中与此相当的是这样的 Form1.Designer.cs

this.tabControl1.SelectedTab.Controls.OfType<DataGridView>().First().ColumnHeaderMouseClick += new DataGridViewCellMouseEventHandler(this.OnColumnHeaderMouseClick);

然而,这只会让设计师崩溃

那么等效代码是什么?

1 个答案:

答案 0 :(得分:0)

经过一番研究和大量的调试和测试后,我找到了解决方案

由于设计人员在运行时没有进行任何复杂的搜索算法,因此设计人员无法“搜索”网格视图,而是可以在创建网格视图时在代码中创建处理程序并为每个实例附加

//Get datagridview
DataGridView dgv = tabControl1.SelectedTab.Controls.OfType<DataGridView>().First();

//Create event handler
dgv.ColumnHeaderMouseClick += (s, e) => this.OnColumnHeaderMouseClick(s,e);

//Link datagridview to datasource
dgv.DataSource = ds.Tables[index.ToString()];