【问题标题】:Access Form controls from static class [duplicate]从静态类访问表单控件[重复]
【发布时间】:2014-06-24 22:15:37
【问题描述】:

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

下面是静态类的结构:

public static class Glob
{
    public static int int1;

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

我正在使用带有静态方法和变量的静态类,因为我需要能够从任何其他表单和类轻松访问其变量和方法。这样我就不需要在每次需要调用它们时都定义类的实例。另外,借助静态类,我可以在类和表单之间共享变量。

【问题讨论】:

  • 似乎您想要一个复合根,您可以将其注入到其他表单和类中。而且可能不止一个。研究单一职责原则和依赖注入。
  • 在这个问题上部分类是否比静态类更好?我之前定义了部分类。它有效,但我必须将所有类的名称更改为 classname.designer.cs 才能摆脱表单。
  • @GrantWinney:在这方面,部分类是否比静态类更好?我之前定义了部分类。它有效,但我必须将所有类的名称更改为 classname.designer.cs 才能摆脱表单。

标签: c# .net winforms static-members


【解决方案1】:

可以静态形式声明:

private static MyformType myform;

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

虽然,这个概念通常不是那么好,也许更好的方法是将您的表单作为参数传递给静态类中调用的函数,并通过属性框中的 chanign acces 修饰符使您应该公开的 contorl表格

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

【讨论】:

    【解决方案2】:

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

    支持字段:

        private static MyForm _instance
    

    单例访问器:

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

    一旦你开始使用这个类,你可以将它的引用分配给支持字段

        public MyForm()
        {
            _instance = this;
        }
    

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

    【讨论】:

    • @Tetsujin no Oni 单例模式适用于 WinForms。 WPF 是一个建议。
    • 当然可以,但是由于指定了 winforms 的问题,因此谈论 WPF 将走向“不是答案”领域...
    猜你喜欢
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 2013-01-31
    • 2017-11-12
    • 2013-01-19
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多