我有一个有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)
编译器抛出错误
我该怎么做呢?
您混淆了表单和表单实例.表格只是一个类.当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)