第一种方法:
假设有两个窗体:Form1、Form2。 其中Form1 里面有控件 Label1;; Form2里面有 button1;
目标:通过点击Form2的button1来改变Form1里的Label1的Text属性。
方法:
step1:
在Form1窗体类中定义一个静态成员,来保存当前主窗体对象:
public static Form1 ForForm2 = null;
step2:
在Form1的构造函数里面初始化静态成员:
ForForm2 = this;
step3:
把Label1的可见级别从private调整为public(在属性栏里的Modifiers)
开始使用:
在Form2里的button1_Click事件里面直接调用Form1的Label1控件:
Form1.ForForm2.Label1.Text = "调用成功";
第二种方法:
在Form1的按钮点击显示Form2的Click函数中
Form2 f2 = new Form2();
f2.Owner = this;
f2.Show();
在Form2的响应要操作Form1中的控件的函数中
Form1 f1 = (Form1)this.Owner;
f1.label1.Text = "调用成功";
注意:Form1中被操作的控件的属性应设置为Public。
第三种方法:
要把Form1中被操作的控件的属性应设置为Public,
修改Form2的构造函数
public Form2(Form1 parent)
{
InitializeComponent();
paf = parent;
}
其中声明:private Form1 paf;
在Form1中点击Button1显示Form2
Form2 f2 = new Form2(this);
f2.Show();
最后在Form2的Button Click函数
private void button1_Click(object sender, EventArgs e)
{
paf.label1.Text = "调用成功";
}
以上三种方法都是将控件的访问属性修改为public(默认为private),这在OPP中是不提倡的。如果要操作窗体控件可以写一个公共的方法在方法中修改控件。
第四种方法:
如要操作Form1中的Label控件,可以再Form1扥类中定义相应的方法
public void SetText(string text,bool status)
{
label1.Text = text;
button1.Enabled = status;
}
在Form2中先声明一个Form字段用以引用Form1;
Form form1;
同时还要修改Form2的构造函数
public Form2(Form form1)
{
InitializeComponent();
this.form1 = form1;
}
最后在处理函数中调用SetText方法
private void button1_Click(object sender, EventArgs e)
{
(form1 as Form1).SetText("调用成功", true);
}
其中(form1 as Form1)是将form1转换为Form1类型的对象。