大家有没发现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窗体传的值

...全文
81 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
你的调用方式有问题。

110,546

社区成员

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

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

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