0

我有一个由多种形式组成的应用程序。有一个 MainForm,然后在此 MainForm 中打开其他表单。打开的子窗体之一(我们将称之为 Form1)包含一个用户控件,其中包含控件,例如数据网格视图。这个datagridview 控件有几个被触发的事件,一个是“cellclick”事件。

此单击事件必须访问在 Form1 中声明的公共计时器对象。

目前只是为了让它工作,我使用了代码:

((Form1)this.Parent.Parent.Parent.Parent.Parent).clickTimer.Start();

然而,这似乎不是我可以访问此 Timer 对象的最佳方式,并且可能对 Form1 及其用户控件的未来开发来说是一个令人头疼的问题。

从用户控件的 datagridview 点击事件内部访问我的 Form1 计时器的替代方法是什么?

感谢任何建议,因为我现在对此一无所知。

谢谢

4

3 回答 3

2

您可以让用户控件将 Timer 实例作为构造函数参数并将其存储在私有支持字段中以供将来访问。

于 2012-08-01T16:37:59.590 回答
0

好吧,我想出了更优雅的方式来访问我的 Form1 对象(而不是使用 Parent.Parent.Parent ......等):

Control activeForm = this.FindForm();

所以现在我有:

((Form1)activeForm).clickTimer.Start();

上面的代码为我提供了 userControl 存在于内部的表单(Form1),并且由于 UC 存在于内部的 Forms 将始终有一个 Timer,因此即使将用户控件放置在不同的表单上(例如 Form2),它也应该可以工作。

然而,@Darin 确实提供了一个很好的替代方案,但我选择使用我的解决方案,因为它为我提供了最快的方法来解决我的问题,只需最少的代码更改,但仍然为我的表单提供低可维护性。当然,具体到我的情况。

于 2012-08-01T17:10:30.200 回答
0

您可以在子表单中创建一个静态事件并在父表单中注册它。

在“cellclick”上触发事件并在父表单的事件处理程序中触发计时器。

于 2012-08-02T06:47:33.457 回答