【问题标题】:C# using winform controls in another classC# 在另一个类中使用 winform 控件
【发布时间】:2011-05-07 05:47:47
【问题描述】:

我有一个 WinForm 应用程序。主窗体上有许多控件,例如标签、文本框等。

如果我在同一个程序集中有另一个类,我如何访问这些控件?

例如在我的新课程中,我想更新 Form1 中的标签?

【问题讨论】:

  • 以防万一:确保在同一个线程上执行此操作
  • 您首先必须将 Form1 的引用传递给该类。通过这样的引用,您可以使用其他人建议的想法来公开公共属性。
  • 扩展@smirkingman 所说的内容,如果您要跨线程调用这些方法,则需要使用 Control.Invoke

标签: c# winforms controls


【解决方案1】:

一种方法是在您的 Form1 类中创建公共属性,以公开您尝试修改的控件

例如,如果您的标签在设计器中称为 label1,那么您可以执行以下操作:

public Label MyForm1Label { get { return label1; } }

【讨论】:

    【解决方案2】:

    在标签(或任何控件)的属性中,将“Modifiers”选项设置为“Public”

    现在您可以从表单的对象访问标签

     Form1 f = new Form1()
     f.lblMyLabel.Text = "My Text"
    

    【讨论】:

      【解决方案3】:

      除了已经提到的解决方案之外,您还可以为您的表单创建一些公共方法,以提供所需的功能(如果必须在多个控件中显示一些更改可能会很好 - 您的其他类不必记住哪个一个改变)

      public void SetSomething(int value)
      {
         Control1.value = value;
         Control2.value = value;
         ...
      }
      

      【讨论】:

        【解决方案4】:

        从另一个类/表单中选择您要访问的控件。转到其属性并将其修饰符值设置为“内部”(如果您只想在同一程序集中使用它)。

        现在您想在同一个程序集中的任何地方使用它,只需创建一个该形式的对象,例如

        myForm objform = new myForm();
        objform.txtName.Text="any text";
        

        然后您可以使用 objform.show() 显示该表单;或 objform.showdialog();

        但我认为这不会解决您的问题,因为我觉得您的表单已经显示在屏幕上,并且您想从另一个表单/类更改其标签/文本框的值 因此,为此,您必须采用当前的表单对象,否则它不会显示当前显示表单的任何更改。

        所以我认为单例模式会给你完美的解决方案。 只需创建类并在该类中创建该形式的静态对象,然后创建一个静态函数并检查对象是否已经初始化,不初始化它并使用现有的否则初始化它。

        还存在许多其他解决方案,例如通过创建公共属性,但您必须使用当前显示表单的相同对象的引用才能看到更改反映到当前显示表单

        【讨论】:

          【解决方案5】:

          最简单的方法是使用:

          Form1 f = 新 Form1() f.lblMyLabel.Text = "我的文字"

          因此,您必须将 Form1 标签“lblMyLabel”设置为公开。我已经用richTextBox 完成了。

          enter image description here

          【讨论】:

          • 请正确格式化您的答案。您的答案与已发布的答案相同。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-02-09
          • 2012-07-23
          • 1970-01-01
          • 2010-11-22
          • 2011-08-04
          • 1970-01-01
          相关资源
          最近更新 更多