获得对frmMain的引用

时间:2014-03-12 18:41:54

标签: c# .net

我用.NET编写C#。我使用表单设计器来创建表单。我在我公开的表单中添加了一个串口对象。 Visual Studio自动生成了一个名为frmMain : form的类。我决定写一个专门用于串口接口的类,我称之为Serial_Comm_Handler。我想访问serialPortCOM类中的串口对象(Serial_Comm_Handler)。另外,我想稍后调用成员函数。一切都在同一名称空间。

我对如何访问frmMain对象的对象引用感到困惑。我试图了解Visual Studio自动生成的代码如何实例化formMain对象。我将其跟回Program ClassMain函数,两者都是 static 。这里有一个Application.Run(new frmMain)的电话。

我猜这是创建表单引用的地方。我希望在这个区域创建对我的两个类的引用,这些类是公共的,以便它们可以相互访问。这是对的地方吗?我尝试了一些东西,但因为类和函数是静态的,所以它似乎不想让我这样做。如果这是正确的方法,我很乐意得到一些建议。

1 个答案:

答案 0 :(得分:2)

通常,您的处理程序类不应直接调用UI上的方法或访问属性。

如果Serial_Comm_Handler需要串口对象,那么你的表单(拥有这个对象)应该是实例化处理程序类并将串口对象传递给它的那个。

如果处理程序需要通知更改的形式,它应该通过使用事件来实现。请注意,如果这是WPF(我假设它不是),那么它应该通知视图模型,然后通过PropertyChanged通知UI。

如果您真的需要访问表单类,那么它取决于您实例化处理程序的位置。如果你在Program类中执行它(绝对不推荐),那么你可以在调用Application.Run之前重构新语句以分配给引用,然后用引用实例化你的处理程序。如果表单正在构造处理程序,只需将其传递给“this”以给它引用。

也不推荐,因为它涉及静态,但您可以在窗体类上有一些暴露串行端口对象的静态属性。

同样,您真的不需要在处理程序中引用表单。您的处理程序处理它给出的串行端口并引发事件。它不应该关心串口来自何处或UI是什么。