【问题标题】:Change a textbox text from inside Class从类内部更改文本框文本
【发布时间】:2017-06-25 16:22:12
【问题描述】:

我的Main form 中有一些对象,例如文本框和面板。 因此,我想更改课堂上的文本框文本或大小或可见性。 我从Main form 公开了我的textBox1。 所以我创建了一个名为Class1的类:

public class Class1
{
    public static void test()
    {
        Main form = new Main();
        form.textBox1.Text = "Hello World";
    }
}

在我的Main form 中,我从我的班级运行代码:

private void MainButton_Click(object sender, EventArgs e)
{
    Class1.test();
}

但我的文本框中没有任何变化。我将文本框带入课堂的方式是否错误?

【问题讨论】:

  • 你创建了一个 Form...
  • 除了可能的“对象引用未设置为对象的实例”之外,这可能是关于 SO 的最常见问题。关键是要意识到表单只是类。 Check this oldie but goodie

标签: c# winforms textbox


【解决方案1】:

问题是你在这里构造了一个新的 Form

public static void test() {
    Main form = new Main(); // constructing a new form?
    form.textBox1.Text = "Hello World";
}

但是,您可以通过传递对Form的引用来解决此问题:

public static void test(Main form) {
    form.textBox1.Text = "Hello World";
}

并调用:

private void MainButton_Click(object sender, EventArgs e) {
    Class1.test(this); // pass a reference to the Main form
}

【讨论】:

  • 谢谢,这是我一直在寻找的。所以我的问题是当我构建一个“新”表单时不包含其中的元素?
  • 元素是这种形式,但这些是新元素。因此,更改“新”表单中的文本框不会影响显示的旧表单。
  • 好的解释!谢谢!
  • <code> 标签有效,然后我可以使用<b>改变了我的生活!
  • @AdrianoRepetti:是的,这是一个伟大的发现 :)
【解决方案2】:

在您的 test 方法中,您正在创建表单的 new 实例(这不是您调用该方法的那个)...新的并且仍然隐藏的表单。

要更改现有的Textbox,您必须传递对FormTextBox 的引用。因此,将 test 方法更改为 TextBox 参数,如下所示:

public static void test(TextBox tb)
{
    tb.Text = "Hello World";
}

像这样使用它:

private void MainButton_Click(object sender, EventArgs e)
{
    Class1.test(this.textBox1);
}

【讨论】:

  • 你的代码没问题。但正如我所写的,我不想在我的班级中只声明一个文本框。我想要很多文本框和面板。所以,Willem Van Onsem 已经回答了我的问题,非常感谢。
猜你喜欢
  • 2011-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多