在Form窗体中,this的应用

背景:

在BHHT_Bill界面中点击某个按钮时,弹出BHZX界面,并在BHZX界面中输入值,然后将BHZX界面中输入的值传递回BHHT_Bill界面。

在BHHT_Bill界面中:

属性:
public string vsBZ = string.Empty;//用来接收弹出界面修改的值
某函数AA中的代码:
BHGL.BHHT.BHZX bhzx = new BHGL.BHHT.BHZX();
bhzx.ShowDialog();
MessageBox.Show("某某操作成功!");

在BHZX界面中:

某函数BB中的代码:
BHHT_Bill bill = new BHHT_Bill();
bill.vsBZ = this.txtBZ.Text;//备注
this.Close();

在代码跟踪的时候,打开BHZX界面并输入值后,bill.vsBZ中是有值的,但当执行到this.Close()后,返回到BHHT_Bill界面中时,函数不会执行MessageBox.Show("某某操作成功!"),而会跳转至声明公共变量属性的地方,开始执行,也就是会再次执行public string vsBZ = string.Empty,执行完变量属性后,才会到达MessageBox.Show("某某操作成功!")的语句,从而BHZX界面传值回BHHT_Bill界面失败!
那么传值失败的原因是什么呢?
原因在于:BHHT_Bill bill = new BHHT_Bill();这句话,因为这是新建了一个BHHT_Bill的实例,从而需要获取这个类的属性,也就是需要执行BHHT_Bill类中变量属性部分的代码。
那么如何实现传值呢?

在BHHT_Bill界面中:

public string vsBZ = string.Empty;//用来接收弹出界面修改的值
某函数AA中的代码:
BHGL.BHHT.BHZX bhzx = new BHGL.BHHT.BHZX();
bhzx.bill = this;//传递窗体自身,而不是新的窗体
bhzx.ShowDialog();

在BHZX界面中:

变量属性:
public BHHT_Bill bill;
某函数BB中的代码:
bill.vsBZ = this.txtBZ.Text;//备注
this.Close();

小注:

通过传递窗体自身,而不是新的窗体,可以实现ShowDialog()界面之间的传值(循环调用)。

最佳实践:

由this(即循环调用)来实现这种功能,其实可以通过一种更为简单、易懂的方式来实现。

代码如下:

在BHHT_Bill界面中:

BHGL.BHHT.BHZX bhzx = new BHGL.BHHT.BHZX();           
bhzx.ShowDialog();
string vsTxtBZ = bhzx.psBZ;
bhzx = null;//注意清空

在BHZX界面中:

变量属性:
public string psBZ = string.Empty;
某函数中的代码:
psBZ = this.txtBZ.Text;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值