大家有没发现C#中窗体互访问题

wujun254 2005-07-21 06:37:27
不知大家有没发现这样一个问题:
将A窗体中textbox1设为公共,点击 button1启动B窗体,点击B窗体的button2,将B窗体中的 textbox2的值传给A窗体中的textbox1.我发现两种情况
1.点击B窗体的button2时并重新启动A窗体,A中的textbox1才能显示B窗体传的值
2.点击B窗体的button2时不重新启动A窗体,A中的textbox1不能显示B窗体传的值

...全文
71 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wujun254 2005-07-21
我是从DELPHI转到C#,所以很多方法仍然沿用DELPHI.我的代码是:
//FormA:
private void buttonA_Click(System.Args e){
FormB frm=new FormB();
frm.show();
}
//FromB:
private void buttonA_Click(System.Args e){
FormA frm=new FormA();
frm.textBoxA.text=this.textBoxB.text;//FormA.textBox1 IS public
frm.show();
}
这样可以实现,但不用frm.show()时;就看不到B传给A的数据了.在DELPHI窗体互访较简单了.
感谢whs20001129(Perfect) , zCheng(钟诚 )


回复
zCheng 2005-07-21
试试下面的代码示例:

//FormA

private void buttonA_Click(System.Args e){
FormB fxb=new FormB();
DialogResult y=fxb.ShowDialog();
if(y==DialogResult.OK){ // 注意:DialogResult.OK 必须和 FormB 中的 button2
// 的 DialogResult 属性一样。
textbox1.Text=fxb.textbox2.Text;
fxb.Dispose();
}
}

//FormB
//把 button2 的 DialogResult 属性设置为 OK.
private void button2_Click(System.Args e){
this.Close(); // 不要调用 this.Dispose(); 否则 FormA 无法接受到 textbox2 的内容。
// 因为 Dispose() 后 FormB 实例会被销毁。也可以调用 this.Hide();
}

.Net 中的任何窗体都是一个实例,所以如果从 FormB 创建窗体 FormA 的话, 新创建的 FormA 不是“重启”而是一个新的 FormA 实例,虽然可以得到 textbox2 的内容但是丢失原来的非初始数据。所以只能通过在 FormA 启动 FormB 时,检测 FormB 的按钮按下返回的 DialogResult 来判断哪个按钮北按下,然后在从启动的 FormB 中获取数据,再销毁 FormB。
回复
whs20001129 2005-07-21
你是不是这样做的formA forma = new formA();forma.buttona.text = this.buttonb.text;forma.Show();这个时候就能看到值了。因为你新实例化一个UI并对新的UI附值当然能看到了。不Show()的化以前的formA和现在的formA不是一个实例当然不行了。
回复
storm97 2005-07-21
你怎么传的?
代码肯定有问题
回复
Camus_Li 2005-07-21
你的调用方式有问题。
回复
相关推荐
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2005-07-21 06:37
社区公告

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