2014-06-24 61 views
0

我有一个有很多控件的Form1,我需要从另一个静态类访问/编辑控件值。由于我在表单上有很多控件,所以需要一些时间来定义集合并从每个单元中获取。我想知道是否有任何方法可以在静态类中定义Form1的实例,以便我可以访问此类中Form1的所有控件?从静态类访问表单控件

这里是静态类的结构:

public static class Glob 
{ 
    public static int int1; 

    public static int Func1() 
    { 
     return 10; 
    } 
} 

在此先感谢。

PS:我使用静态类和静态方法和变量,因为我需要能够轻松地从任何其他形式和类访问其变量和方法。这样我就不需要每一次需要调用它们就定义一个类的实例。另外,通过静态类的帮助,我可以在类和表单之间共享变量。

+0

似乎您想要注入到其他表单和类中的组合根。可能不止一个。考察单一责任原则和依赖注入。 –

+2

带有应用程序中的所有内容的字段的大型全局静态类通常是一个糟糕的主意。它会引入意想不到的错误,使得调试更加困难,单元测试变得非常困难。 –

+0

对于这个问题,部分类比静态类更好吗?我之前定义了部分类。它的工作,但我不得不将所有类的名称更改为classname.designer.cs为了摆脱形式。 – NESHOM

回答

1

您可以在静态形式声明:

private static MyformType myform; 

public static void setmyform(MyformType myform1) 
{ 
    myform=myform1; 
} 

虽然,这个概念一般是不太好,也许更好的方式是通过你的形式参数称为静态类的功能,使您的控制应该被公开,通过调节表格中的通配符修改器

public static void EgClearText(Textbox tb) 
{ 
    tb.Text=""; 
} 
public static void DoSomethingElseWithTheForm(MyformType myform) 
{ 
    myform.someOtherContol.Visible=false; 
} 
0

您可以将单例模式应用于表单。请注意,实例将返回对上次创建的MyForm实例的引用,因此您不应该在此处有多个MyForm实例。

支持字段:

private static MyForm _instance 

辛格尔顿存取:

public static MyForm Instance 
    { 
     get 
     { 
      return _instance; 
     } 
    } 

一旦beging使用类,可以将其参考分配给支持字段

public MyForm() 
    { 
     _instance = this; 
    } 

作为一个边注意;如果您有技术选择,请查看WPF。它具有bindings以编程方式获取和设置UI控件的值

+0

WinForms不是WPF .... –

+0

@Tetsujin no Oni单例模式适用于WinForms。 WPF是一个建议。 –

+1

当然,但由于该问题指定的WinForms,谈论WPF正在向“不是答案”的领土... –