我现在有两个窗口,A B
A打开后点击按钮B窗口被实例化并显示了出来 现在我通过点击 B 上的按钮去修改A的背景色,如何做呢? 如果我现在要 把B 上的一个文本域填写值,并点击确定后 A上的文本域 跟着改变成所填的值呢?]
A打开后点击按钮B窗口被实例化并显示了出来 现在我通过点击 B 上的按钮去修改A的背景色,如何做呢? 如果我现在要 把B 上的一个文本域填写值,并点击确定后 A上的文本域 跟着改变成所填的值呢?]
{
this.f1=f1;
}private void Button1_Click(....)
{
this.f1.broundColor=Colors.Red;
}在Form1 中:Form2 f2=new Form2(this);
f2.Show();
在Form2 中:private Form1 f1public Form2(Form1 f1)
{
this.f1=f1;
}private void Button1_Click(....)
{
this.f1.broundColor=Colors.Red;
}在Form1 中:Form2 f2=new Form2(this);
f2.Show();
呵呵综合一下前面两位的。
A域的文本值也是同理。
写完整了就是:private Form1 f1;
public Form2(Form1 f1)
{
this.f1 = f1;
InitializeComponent();
}
然后就可以在Form2窗体中操作Form1了。并且用Show() or ShowDialog()方法显示的Form2窗体都可以操纵Form1,效果是一样的
InitializeComponent();这是用来初始化Form2窗体的,没它你Form2什么都干不了。回帖也得有责任心。
你这样能在form2里操纵form1里的对象?自己试试吧。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.Show();
}
internal void settext(string txt)
{
textBox1.Text = txt;
}
}
//Form2代码
public partial class Form2 : Form
{
public Form2()
{
((Form1)Application.OpenForms["Form1"]).settext("aaaaa");
InitializeComponent();
}
}
但是f1.BackColor这个属性的确能点出来。原因很简单:因为这些属性都是共有的,你可以去msdn查一下
还有上面的东西是2005特有的么?为什么我在2003下点不出来呢?
private TextBox t;
public TextBox _T
{
set{ t = value; }
}然后我在定义FORM2的对象后加一句
f2._T = this.TextBox1;
这不就可以在第二个窗体中操作1中的文本框了么?这比你说的方法性能如何呢?2005用的不是很习惯。不过好像性能还是不如你的那个,因为我传的是一个文本框的整个对象。呵呵
delegate void Updater();
在被打开的FORM2上增加委托成员
Updater upt;
FORM2的构造函数传入委托
public Form2(Updater arg):this()
{
upt = arg;
}
FORM1打开FORM2时就写个匿名函数上去
Form2 f2 = new Form2(
void delegate()
{
this.backColor = Color.Black;
}
);要传文字也是相同的方法,委托变成void delegate (string str)这样就行了
把Form1中的值通过属性传到Form2中啊