在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;
时间: 2024-08-02 18:40:11

在Form窗体中,this的应用的相关文章

c#画图 如何在c# Form窗体中画一个圆!

问题描述 c#画图 如何在c# Form窗体中画一个圆! 怎么样在c#窗体中画出下图这样的图图片说明 解决方案 http://download.csdn.net/detail/yuping_liu/2343322 解决方案二: http://download.csdn.net/detail/yzl417020551/8629301 解决方案三: http://bbs.csdn.net/topics/390063048 解决方案四: http://blog.csdn.net/xianfajushi

两个独立的winform程序中,如何传递form窗体界面?

问题描述 就是在客户端Winform程序中的一个form窗体,需要在Server端Winform程序中完整的展现出来,目前想到了两种方式:第一种方式:将客户端程序中的form窗体做截图,直接传递到B程序.这样做传输量太大,再者有滚动条的界面展示不出来,不好用:第二种方式:将客户端程序Form窗体中的所有控件属性(大小,位置,值等等)当作参数,传递到Server端程序,在Server端程序中重新构建界面:这样需要传递的各种元素太多,比较麻烦.请教各位高手,还有没有其他比较好的方法么? 解决方案 解

Form窗体通过回传的值,动态在panel中加载相应的用户控件

问题描述 Form窗体中左右各有一个panel(pannelLeft,panelRight),panelLeft中加载的用户控件中有个按钮事件,点击按钮后传值给From窗口,Form窗口通过回传的值,动态的在panelRight中加载相应的用户控件,怎么实现? 解决方案 解决方案二:winform?解决方案三:是winform的解决方案四:该回复于2012-04-16 15:55:16被版主删除解决方案五:左边导航.右边内容的方式左边导航,然后用字符串直接反射出控件解决方案六:现在的问题是For

二种将Word文档嵌入到WinForm窗体中方法

Office是我们日常工作中经常用到的办公软件,然而,随着信息技术的飞速发展,已经有越来越多的人使用Word写作文档.使用Excel制做报表.使用OutLook方便的收发电子邮件.一切的操作都是这么轻松,实例中将会介绍怎样使用C#在Form窗体中显示Word文档,运行效果如图1所示.   图1  将Word文档嵌入到WinForm窗体中  关键技术 本实例重点在于向读者介绍怎样使用WebBrowser控件显示Word文档,下面对本实例中所用到的关键技术进行详细讲解. WebBrowser控件是

C# Winfrom项目中,如何制作截图中的form窗体以及lable字体的样式

问题描述 C# Winfrom项目中,如何制作截图中的form窗体以及lable字体的样式 在C# Winfrom项目中,如何将form窗体设置背景色.前景色.透明度以及将Lable控件中的文字如何设置大小.颜色.字体. 可以达到或接近下面截图中的效果. 个人在制作的过程中发现与截图中的效果有点差异,没有达到或接近截图中的效果.请各位帮忙大致的说明下整个过程或提供相关的参考资料,谢谢. 附截图: 解决方案 基本方法就是自己绘制,或用第三方的库,如果人家是一张图片,你想仿照,基本没戏,因为其中涉及

c#中form窗体第二次打开时保持第一次打开时的位置和数据信息

问题描述 各位大侠,我现在创建了一个Form窗体,但是我在重复运行的时候窗体的位置总是不唯一,而且窗体的数据都是初始化的数值,我现在想要实现两个功能:1.窗体每次打开的时候都在固定位置,不会变来变去的:2.窗体每次打开的时候都保存上次编辑的值,而不是初始化的值.我有搜过相关文档,很多人推荐用注册表,但是我不懂注册表哎,我觉得http://www.csharpwin.com/csharpspace/4727r1017.shtml这个代码能解决我第一个问题只是我不太懂代码的意思.....比如"pub

在同一窗体中使用PHP来处理多个提交任务

在PHP中的处理窗体数据比其它网页程序语言更简单--如果你使用这种语言一段时间后,你会发现这是一个不可争辩的事实.这种操作的简易性使它可以容易地处理更为复杂的窗体事件,包括今天讨论的主题,即在同一个窗体中通过多个按钮来处理不同的任务. 为什么使用多个提交任务? 在我回答这个问题之前,先让我回答一个很显然的问题:既然许多窗体更适合单一的提交按钮,为什么有时人们需要的是两个(或者是更多)的提交按钮? 对这一问题最好的解释方法是用我最近开发项目中的一个实例来说明.在这一项目中,我的任务是给一个图书馆建

C#实现窗体中所有控件跟随窗体尺寸的自由变换

/**********************************C#中代码实现控件随窗体的自由变换********************************************/ // 文章出处: 星魂工作室 作者:月云 // 2008.8.4 /**********************************************************************************************************/ using Syst

C# Winfrom项目,如何将form窗体由矩形绘制成圆形。

问题描述 C# Winfrom项目,如何将form窗体由矩形绘制成圆形. 在C# Winfrom项目中,如何将form窗体由矩形绘制成圆形.请帮忙看看如何设置form窗体可以达到下面截图中的圆形效果.谢谢!最好能够与截图中的圆形做得十分接近(圆形的背景色.字体.线条等). 解决方案 不规则窗体代码下载:http://files.cnblogs.com/alexis/IrregularForm.rar 解决方案二: 使用protected override void OnPaint(PaintEv