C#使用多个表单

Gre*_*row 1 c# winforms

我有一个有2种形式的应用程序.当我单击表单2上的按钮时,我希望它能够更改form1中的文本:

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

    private void button1_Click(object sender, EventArgs e)
    {
        Form1.label1.Text = "Fred";
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器抛出错误

我该怎么做呢?

Joh*_*ers 8

您混淆了表单和表单实例.表格只是一个类.当Form1显示时,显示的是Form1类的实例.当Form2显示时,将显示Form2的实例.

你正试图用

Form1.label1.Text = "Fred";
Run Code Online (Sandbox Code Playgroud)

但是您只能设置实例的字段或成员.你指的是"Form1" 这个.

你需要两件事.我假设Form2是从Form1上的按钮启动的.向Form2添加一个构造函数,它接受Form1的一个实例:

private Form1 _starter;
public Form2(Form1 starter) : this()
{
    _starter = starter;
}
Run Code Online (Sandbox Code Playgroud)

然后向Form1添加一个公开标签文本的属性:不要直接公开控件 - 只有给定的表单应该知道它上面有哪些控件:

public string LabelText
{
    get {return label1.Text;}
    set {label1.Text = value;}
}
Run Code Online (Sandbox Code Playgroud)

然后让Form2设置该属性:

private void button1_Click(object sender, EventArgs e)
{
    _starter.LabelText = "Fred";
}
Run Code Online (Sandbox Code Playgroud)