0

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

因此,假设 Form1 是父级。Form2 是孩子。我已经这样打开了 Form2:

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

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

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

4

2 回答 2

1

您可以使用从ClassmyDataGrid.DoubleClick继承的ClassDataGridSystem.Windows.Forms.Control

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

    private void MyDataGridOnDoubleClick(object sender, EventArgs eventArgs)
    {
        //throw new NotImplementedException();
    }
于 2013-02-04T21:36:53.180 回答
1

AppDeveloper 的答案是您所需要的,但我感觉您的问题的核心可能是 Form2 的 DataGrid 相对于父 MDI 容器 (Form1) 的默认可见性。Form1 可以订阅 Form2 的 DataGrid 中的任何事件,但前提是 DataGrid 被标记为public(或internal)。默认情况下,该子控件将被标记为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 的最短路径。

于 2013-02-04T22:28:31.177 回答