C# 从类外部更改WinForm元素

C# 从类外部更改WinForm元素,c#,winforms,C#,Winforms,我有一个简单的Windows窗体,带有按钮和文本框。当按下按钮时,我想用一些字符串更新文本框。我知道以下工作: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { textBox1.text = "some

我有一个简单的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
的类中。在这个类中,我希望有一个方法,可以在任何
文本框
上运行,并且可以使用任何
字符串
。尝试以下操作时,出现错误:
名称“textBox1”在当前上下文中不存在

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;
    }
}
我在这里看到了关于类似事情的更复杂的问题,但我无法让他们的解决方案起作用。我想我错过了一些基本的东西

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

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

target
将采用什么类型?

将您的函数更改为接受如下文本框:

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

将函数更改为接受文本框,如下所示:

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

Samvel Petrosov answer是最好的解决方案,但如果您希望有其他选项,那么它就是:将文本框修饰符设置为
public
(或
internal
),在
Updates
类中添加对表单的引用。然后您可以自由修改它(文本框)。

Samvel Petrosov answer是最好的解决方案,但如果您想有其他选择,它是:将文本框修改器设置为
公共
(或
内部
),在
更新
类中添加对表单的引用。然后您就可以自由修改它(文本框)。

即使问题的内容看起来没问题,我还是投票关闭它,因为它表明您甚至没有查看Microsoft的官方文档页面,也没有对该主题进行任何研究。目标类型与表单中的控件类型完全相同……我同意@m.rogalski的观点,因为这个问题非常基本,不能被认为有任何专业价值。我是编程新手。我查阅了官方文件,但不明白。谢谢你对新手的欢迎!很棒的东西。在Visual Studio中,如果你将鼠标悬停在一个变量(
textBox1
)上,它将显示它的类型(
TextBox
)。尽管问题的内容看起来不错,我还是宁愿投票关闭它,因为它显示你甚至没有查看Microsoft的官方文档页面,也没有对该主题进行任何研究。目标类型与表单中的控件类型完全相同……我同意@m.rogalski的观点,因为这个问题非常基本,不能被认为有任何专业价值。我是编程新手。我查阅了官方文件,但不明白。谢谢你对新手的欢迎!很棒的东西。在Visual Studio中,如果您将鼠标悬停在变量(
textBox1
)上,它将显示其类型(
TextBox
)。在这种情况下,我宁愿使用type,因为它可以更改
按钮、
标签
TextBox
@m.rogalski的文本。是的,您是对的,控件将使函数更通用。但是,如果他想更改某些特定于文本框字段的字段,那么它将带来额外的检查。在这种情况下,我宁愿使用类型,因为它可以更改
按钮
标签
文本框
@m.rogalski的文本。是的,您是对的,控件将使功能更通用。但是,如果他想更改某些特定于文本框字段的字段,那么它将带来额外的检查。我要注意的是,在这种情况下,他需要为
表单
保留一个
更新
类的实例。我要注意的是,在这种情况下,他需要为
表单
保留一个
更新
类的实例。