如何检测mdi子';s控制事件

本文关键字:事件 控制 mdi 何检测 检测 | 更新日期: 2023-09-27 17:57:29

我一直在网上寻找,但找不到我想要做的事情的答案。我正在创建一个MDI应用程序,子窗体上有一个DataGrid。我需要弄清楚如何在子窗体上订阅该DataGrid的双击事件。

假设Form1是父级。Form2是孩子。我打开了Form2:

Form2 f = new Form2 { Text = "Child", MdiParent = this };
f.Show();

当用户双击表单(f)中的数据网格时,我需要能够检测到它。有人能给我指正确的方向吗?

(我希望这已经解释清楚了)

如何检测mdi子';s控制事件

您可以使用DataGrid类从System.Windows.Forms.Control类继承的myDataGrid.DoubleClick

    private void Form_Load()
    {
        myDataGrid.DoubleClick += MyDataGridOnDoubleClick;
    }
    private void MyDataGridOnDoubleClick(object sender, EventArgs eventArgs)
    {
        //throw new NotImplementedException();
    }

AppDeveloper的答案正是您所需要的,但我觉得问题的核心可能是Form2的DataGrid相对于父MDI容器(Form1)的默认可见性。Form1可以订阅Form2的DataGrid中的任何事件,但前提是DataGrid标记为公共(或内部)。默认情况下,该子控件将被标记为private,因此仅对Form2可见。

因此,如果您只是将DataGrid的访问修饰符从private更改为public,您应该能够从Form1中侦听其事件,如下所示:

Form2 childForm = new Form2();
childForm.MdiParent = this;
// Form2.myDataGrid must be public/internal
childForm.myDataGrid.DoubleClick += new EventHandler(MyDataGridOnDoubleClick);
childForm.Show();

如果你想避免组件之间的紧密耦合,有更好的方法来处理这个问题,但在你的情况下,这是从A到B的最短路径。