我有一个由多种形式组成的应用程序。有一个MainForm,然后在这个MainForm中打开其他形式。打开的子窗体之一(我们将其称为Form1)包含一个在其中具有控件的用户控件,例如数据网格视图。此datagridview控件有几个被触发的事件,一个是“cellclick”事件。
此click事件必须访问在Form1中声明的公共计时器对象。
目前只是为了让它工作我使用了代码:
((Form1)this.Parent.Parent.Parent.Parent.Parent).clickTimer.Start();
然而,这似乎不是我访问此Timer对象的最佳方式,并且可能会成为未来开发Form1及其用户控件的头痛。
从用户控件的datagridview点击事件中访问我的Form1计时器有哪些替代方法?
任何建议都值得赞赏,因为我现在正在填补空白。
由于
答案 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”上触发事件,并在父窗体上的事件处理程序中触发计时器。