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

本文关键字:访问 访问表 表单 变量 控件 用户 | 更新日期: 2024-09-19 18:38:45

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

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

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

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

然而,这似乎不是我访问这个Timer对象的最佳方式,而且可能会让Form1及其用户控件的未来开发感到头疼。

从用户控件的datagridview单击事件中访问Form1计时器的其他方法有哪些?

任何建议都将不胜感激,因为我现在对此一无所知。

感谢

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

您可以让用户控件将Timer实例作为构造函数参数,并将其存储在专用后台字段中以备将来访问。

我想出了一种更优雅的方法来访问我的Form1对象(而不是使用Parent.Prent.Parent…等),方法是:

Control activeForm = this.FindForm();

所以现在我有了:

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

上面的代码给了我userControl所在的表单(Form1),由于UC所在的表单总是有一个Timer,即使用户控件放在不同的表单上(比如Form2),这也应该有效。

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

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

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