依旧是俩窗体通信的问题

kendezhu 2010-01-01 04:14:22
问题一: 为什么没方法二在按下Form2的按键button1时老是显示的是Form1中初始化时str的值(此处为""),不是在按下Form1的button1时候已经改变了str的值了吗?另外就算把代码写在构造函数里还是不行,Form1的构造函数代码如下:
public Form1()
{
textbox texbox1 = new textbox();
str=texbox1.text;
InitializeComponent();
}


方法一(成功了)
窗体Form1
public partial class Form1 : Form
{


public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{

Form2 form2 = new Form2();
form2.str = this.textBox1.Text;
form2.Show();
}
}
窗体Form2
public partial class Form2 : Form
{
public string str = "";
public Form2()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{

Form1 form1 =new Form1();
this.textBox2.Text=str;

}
}
方法二(失败了)
窗体Form1
public partial class Form1 : Form
{

public string str = ""; //主要的与方法一不同的地方
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{

Form2 form2 = new Form2();
str=this.textbox1.text;
form2.Show();


}
}
窗体Form2
public partial class Form2 : Form
{

public Form2()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{

Form1 form1 =new Form1();
this.textBox2.Text = form1.str;

}
}

问题二:

另一种方法(成功了)

窗体from1

public partial class Form1 : Form
{

public string str;
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{

Form2 form2 = new Form2();
form2.Owner = this;
str = this.textBox1.Text;
form2.Show();


}
}

窗体Form2

public partial class Form2 : Form
{

public Form2()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{

Form1 form1 =(Form1)this.Owner; //为什么不能写成 Form1 form1=this.Owner;(this在这指Form2的引用,Form2窗口本来就是被Form1所拥有,this.Owner不就是指的Form1吗?干嘛还要强行转换啊!) 这可能是我对Owner不太了解吧,MSDN只说了些现象(如Form1最小化Form2也最小化)可实质上Owner怎样的呢,因为我看到似乎此处Form1不用创建实例就能访问自身的成员: 如下面的form1.str
this.textBox2.Text = form1.str;

}
}

拜托了各位大侠! 这些问题困扰我好久了。
...全文
68 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
rcy5211314 2010-01-02
  • 打赏
  • 举报
回复
public string str = "";
这再次赋值了,所以一直都是“”
public string str ;这样写
  • 打赏
  • 举报
回复
我被你搞糊涂了,不懂你说什么
mngzilin 2010-01-01
  • 打赏
  • 举报
回复
方法一:虽然成功了,但是是错误的。Form1 form1 =new Form1();只是实例化一个新窗口对象this.textBox2.Text=str; 这句和from1没有关系,所以只是form2中的textbox内容改变了。

方法二:Form1 form1 =new Form1();只是实例化一个新窗口对象,和原先的form1窗口没有关系。
this.textBox2.Text = form1.str; //这里获取的是新窗口对象的str,和原先的form1.str没有关系

方法三:正确。参考此贴
http://topic.csdn.net/u/20091226/11/4ef8dc58-6375-48cc-b8b9-67a800d4b9e6.html

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧