在C#中从用户控件访问表单变量

时间:2012-08-01 16:35:47

标签: c# winforms

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

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

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

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

然而,这似乎不是我访问此Timer对象的最佳方式,并且可能会成为未来开发Form1及其用户控件的头痛。

从用户控件的datagridview点击事件中访问我的Form1计时器有哪些替代方法?

任何建议都值得赞赏,因为我现在正在填补空白。

由于

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

Control activeForm = this.FindForm();

所以现在我有:

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

上面的代码为我提供了userControl存在于其中的表单(Form1),并且由于UC内部存在的Forms将始终具有Timer,即使用户控件放在不同的表单上也应该有效(比如Form2) )。

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

答案 2 :(得分:0)

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

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

相关问题