如何从C#中的类访问GUI元素?

时间:2013-11-17 18:38:07

标签: c# user-interface

我在C#中安装了Windows应用程序,并在GUI中有一个richtextbox。我想要访问richtextbox并从类中添加一些文本。我想过在表单的代码文件中创建一个静态的RichTextBox项,然后像这样调用它:

public partial class Form1 : Form
{
    public static RichTextBox box;

    public Form1()
    {
        box = richtextbox_in_gui;
    }
}

public class SomeClass()
{
    Form1.box.AppendText("...");
}

这是一种安全的方法吗?或者还有其他方法可以做到这一点吗?

由于

1 个答案:

答案 0 :(得分:3)

您不需要静态字段,因为Form1的所有实例都是如此;它应该是一个正常的领域。

然而,public字段不是一个好主意,因为可以从外部操纵类。你想要封装行为,所以最好的想法是一个方法:

public partial class Form1 : Form
{
    public Form1()
    {
        box = richtextbox_in_gui;
    }

    public void AppendText(string text)
    {
      this.textbox.AppendText(text);
    }
}

public class SomeClass
{
  private Form1 form;

  public SomeClass(Form1 form)
  {
    this.form = form;
  }

  public void AppendHelloWorld()
  {
    this.form.AppendText("Hello World");
  }
}

现在,如果您有对表单对象的引用,则可以使用AppendText方法:

Form1 form = new Form1();
var some = new SomeClass(form);
some.AppendHelloWorld();

这种编码方式称为Dependency Injection