从类外部更改WinForm元素

时间:2017-07-14 10:33:18

标签: c# winforms

我有一个带有按钮和文本框的简单Windows窗体。我希望按下按钮时文本框更新一些字符串。我知道以下工作:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        textBox1.text = "some string";
    }
}

我也知道,以下内容可行。这给了我更多的自由,因为我可以轻松地决定我想在文本框中出现什么:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        updateText("some string");
    }

    public void updateText(string s)
    {
        textBox1.Text = s;
    }
}

现在,让我们说我的代码越来越大,我想保持整洁。我想将执行更新的代码移动到名为Updates的其他类中。在该课程中,我想要一个方法,我可以在任何textBox上使用string运行。当我尝试以下操作时,出现错误:The name 'textBox1' does not exist in the current context

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Updates.updateText("some string");
    }
}

public class Updates
{
    public void updateText(string s)
    {
        textBox1.Text = s;
    }
}

我在这里看到了类似事情的更复杂的问题,但我无法让他们的解决方案发挥作用。我想我错过了一些基本的东西。

此外,我不知道如何扩展此方法以接受任何textBox,例如:

public void updateText(??? target, string s)
    {
        target.Text = s;
    }

target会选择哪种类型?

2 个答案:

答案 0 :(得分:3)

将您的函数更改为接受TextBox,如下所示:

public void updateText(TextBox target, string s)
{
    target.Text = s;
}

答案 1 :(得分:1)

Samvel Petrosov的答案是最佳解决方案,但是如果您想要另一个选项,那就是:将文本框修饰符设置为public(或internal),添加对表单的引用Updates课程。然后你就可以自由地修改它(文本框)了。