


全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Form问题是最基本的问题,因为编写WinForm程序首先接触的对象就是它,因此在论坛中对它而产生的问题也最常见。 与Form相关的常见问题大致分为如下的四类问题。 第一类问题:如何控制窗体的显示顺序; 第二类问题:窗体之间的对象如何相互引用或操作; 第三类问题:如何处理窗体唯一性问题; 最后一个问题:如何合理的关闭窗体或程序。 如何控制窗体的显示顺序接下来先说说如何控制窗体的显示顺序。 很多编程者常常会遇到这样的现象,例如,通过一个登录窗体去打开一个主窗体,然后要在主窗体中想关闭这个登录窗体。那么就有人出主意,你可以在打开主窗体的时候把登录窗体自身传进去,然后在主窗体中调用它的Hide方法来隐藏。虽说这样可以暂时达到你所要的效果,但不是最合理的解决办法。因为这样做有如下两个缺陷: 第一个就是,登录窗体已经完成使命,而资源没有得到及时释放; 其次就是,在窗体关闭的时候比较麻烦,需要找到登录窗口,关闭自身的同时要关闭登录窗体。 遇到此问题的时候,首要的是分析窗体打开的顺序以及相互关联的条件,常见的类型无非就是主子或者先后这两种。理解好第一点后,那么要学会合理使用ShowDialog和DialogResult这两个好东西,前者属于模式打开窗体,后者属于窗体的返回值。 明白了这两点,就可以很方便的解决类似于登录窗体的问题,这方面的例子可以参看我的这篇文章。 /knight94/archive/2006/04/06/652394.aspx 文章中修改了一个WinForm的入口函数Main,那么并不意味着这个方法只能在这儿使用,它可以在很多方法中进行使用,基本语法类似,这里我就不多说了。 窗体之间的对象如何相互引用或操作第二个要说的是窗体之间的对象如何相互引用或者操作。 常见的类似问题有: 1 如何在子窗体访问到主窗体中的某某数据; 2 如何在子窗体中调用主窗体中的某某方法; 3 如何在子窗体关闭的时候去更新主窗体的某某数据。 对于如上的三个问题,完全可以由如下两种方法来完成: 1 当数据是子窗体显示的必要条件的话,通过修改子窗体的构造函数来进行传递数据; 2 如果是不定时的访问,则可以通过委托来实现。 对于第一点,我就不多说了,对于第二点,我用如下的例子来说明。 首先在子窗体中,需要如下: /在主窗体中定义两个delegate分别用于设置或者获取主窗体中文本框的值 public delegate void SetTextValue( string TextValue ); public delegate string GetTextValue( ); / 在子窗体中 / Handler for methods from main form private SetTextValue SetText = null; private GetTextValue GetText = null; / 通过如下所示来调用方法 string strValue = GetText(); SetText( strValue + DateTime.Now.ToString() ); 除了如上一些操作外,还需要修改子窗体的构造函数,来接收这两个delegate方法,这里就不多说了。 至于主窗体,首先要为这两个委托来实现对应函数,例如: / / 从其它窗体获取文本值 / / private string GetValue() return yourTextBox.Text; / /设置其它窗体的文本值 / / private void SetValue( string sValue ) yourTextBox.Text = sValue; 那么调用子窗体的时候就比较简单了。 /创建子窗体并且显示 yourSubForm myForm = new yourSubForm( new SetTextValue( SetValue ), new GetTextValue( GetValue ) ); myForm.ShowDialog(); 这样一个通过委托来操纵主窗体的例子就完成了。这里需要注意的一点,如果在子窗体中大量使用到主窗体的数据的话,那我建议你重新考虑窗体架构,这意味着你目前的窗体架构不合理。 有人说了,仅仅为了访问一个成员就需要劳师动众编写委托,多麻烦,直接public成员,或者使用static静态成员多方便,那么对于这两点的坏处,我这里就不多说了,参看我的这篇文章你就会明白。 /knight94/archive/2006/06/04/772886.aspx 如何处理窗体唯一性问题第三类问题,窗体的唯一性问题,这个问题我在这儿就不多说了,因为这类问题我在如下的文章已经说得很透彻了。 /knight94/archive/2006/05/24/752783.aspx 如何合理的关闭窗体或程序最后一个问题,如何合理的关闭窗体和程序。很多人关闭了窗体,发现程序进程还在,就不知道如何来操作了。大多数的问题,都是因为第一类问题而产生的连锁反应。所以我不建议使用Application.Exit来关闭程序,虽说C#写的是托管程序,内存的释放可以不用操心,但是好的编码习惯,有利于在编写复杂程序的时候能得心应手。 那么如何正确的关闭一个窗体或者一个程序呢。 如果不能正常关闭的原因是由于第一类问题造成的话,按照第一类的方法去修改窗体显示顺序,来达到合理的步骤。前期的正确,才能保证后期的能通过this.Close进行关闭窗体以及程序。 如果是子窗体要关闭连锁到主窗体关闭的话,这类问题也占一大部分,那么解决此类问题可以采用第二类问题所提到委托方法。 那么还有一些窗体关闭,程序没有正常关闭,是由于子线程没有关闭的问题,这部分留到线程汇总部分再
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基于中医古籍的咳嗽(外感)中医诊疗辅助决策方案研究
- 函数空间上一类Toeplitz算子的交换性
- “双碳”目标下我国气候变化诉讼制度构建的研究
- 韧性视角的川西南昭觉河城市河流廊道景观设计研究
- 高职学生职业技能培养研究-以L职业技术学院为例
- 抗镉菌株对Cd(Ⅱ)的吸附特性及抗性机制研究
- 新型水凝胶通过捕获中性粒细胞外泌体促进颌骨缺损内源性再生的机制与应用研究
- 450m级碳纤维多孔浮力材料设计与耐水压性能研究
- 2025至2030国内铝板幕墙行业市场发展分析及竞争格局与投资机会报告
- 精神卫生中心工作汇报
- 血透护理记录书写规范
- 高血压性心脏病护理
- 【MOOC】大学物理(热学、振动波、光学、近代物理)-东北大学 中国大学慕课MOOC答案
- 《工业园区培训》课件
- 建筑机电工程抗震支架设计及施工方案
- 孤独症家庭心理调适
- 《基于核心素养的中学数学探究式教学研究》2300字(论文)
- 四川省成都市2023-2024学年六年级上学期语文期末试卷(含答案)
- 2024精神堡垒制作安装合同
- 045.糖尿病患者血脂管理中国专家共识2024版
- 重庆市县(2024年-2025年小学四年级语文)人教版期末考试(下学期)试卷及答案
评论
0/150
提交评论