- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
dotnet开发Form问题集锦
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方法,这里就不多说了。
至于主窗体,首先要为这两个委托来实现对应函数,例如:
/// summary
/// 从其它窗体获取文本值
/// /summary
/// returns /returns
private string GetValue()
{
return yourTextBox.Text;
}
/// summary
///设置其它窗体的文本值
/// /summary
/// param name=sValue /param
private void SetValue( string sValue )
{
yourTextBox.Text = sValue;
}
那么调用子窗体的时候就比较简单了。
//创建子窗体并且显示
yourSubForm myForm = new yourSubForm(
new SetTextValue( SetValue ),
new GetTextValue( GetValue ) );
myForm.ShowDialog();
这
文档评论(0)