如何检测mdi孩子的控制事件?

时间:2013-02-04 21:23:53

标签: c# events mdi

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

所以,让我们说Form1是父母。 Form2是孩子。 我打开了Form2:

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

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

(我希望这清楚地解释了)

2 个答案:

答案 0 :(得分:1)

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

    private void Form_Load()
    {
        myDataGrid.DoubleClick += MyDataGridOnDoubleClick;
    }

    private void MyDataGridOnDoubleClick(object sender, EventArgs eventArgs)
    {
        //throw new NotImplementedException();
    }

答案 1 :(得分:1)

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

因此,如果您只是将DataGrid的访问修饰符从私有更改为 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的最短路径。