网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 软件工程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
本月文章推荐
.C++ virtual member function FAQ.
.项目管理系列之-质量管理.
.QA与QC的良性协作.
.浅析.Net下的多线程编程.
.建立有效的软件度量过程.
.IBM的MARS加密算法实现(7).
.如何成为一个好的系统分析员.
.Ruby On Rails与Jdon Framework架.
.一场与社会工程学骗子的斗争.
.测试工具应用之我见.
.让.Net数据成为SOA的集成部分.
.代码编写中的心理学与美学.
.解析.NET框架下的数据类型转化技.
.BEA服务:让SOA实施更快捷.
.成功测试管理的九大原则.
.走出软件质量误区.
.谈谈Site在活动目录中的应用.
.SOA面向服务架构的原则.
.Linux的用户进程是如何使用内存的.
.如何导入服务导向架构 SOA.

.NET2.0中一种简单的窗口控件状态控制法

发表日期:2008-3-23



  我们经常需要控制窗口控件的状态。比如,在某些情况下,需要禁止一部份控件,或让一部份控件呈只读状态等等。

  假如有如下的窗口:


  当按下Enable时,左侧的所有控件都要禁止(Enabled=false),当按下Disable时,左侧的所有控件都取消禁止(Enabled=true)。
通常的作法是直接用代码来控制:

.NET2.0中一种简单的窗口控件状态控制法 private void EnableOrDisable(bool isEnabled)
.NET2.0中一种简单的窗口控件状态控制法.NET2.0中一种简单的窗口控件状态控制法 .NET2.0中一种简单的窗口控件状态控制法{
.NET2.0中一种简单的窗口控件状态控制法 this.button1.Enabled = isEnabled;
.NET2.0中一种简单的窗口控件状态控制法 this.checkBox1.Enabled = isEnabled;
.NET2.0中一种简单的窗口控件状态控制法 this.comboBox1.Enabled = isEnabled;
.NET2.0中一种简单的窗口控件状态控制法 this.textBox1.Enabled = isEnabled;
.NET2.0中一种简单的窗口控件状态控制法 }
.NET2.0中一种简单的窗口控件状态控制法
.NET2.0中一种简单的窗口控件状态控制法 private void BTnEnable_Click(object sender, EventArgs e)
.NET2.0中一种简单的窗口控件状态控制法.NET2.0中一种简单的窗口控件状态控制法 .NET2.0中一种简单的窗口控件状态控制法{
.NET2.0中一种简单的窗口控件状态控制法 EnableOrDisable(true);
.NET2.0中一种简单的窗口控件状态控制法 }
.NET2.0中一种简单的窗口控件状态控制法
.NET2.0中一种简单的窗口控件状态控制法 private void btnDisable_Click(object sender, EventArgs e)
.NET2.0中一种简单的窗口控件状态控制法.NET2.0中一种简单的窗口控件状态控制法 .NET2.0中一种简单的窗口控件状态控制法{
.NET2.0中一种简单的窗口控件状态控制法 EnableOrDisable(false);
.NET2.0中一种简单的窗口控件状态控制法 }

  这样的作法,在一些简单的逻辑控制倒也行的通。但是一旦控件的数量比较多,而控制逻辑也比较复杂的时候,类似EnableOrDisable的函数将会变得很多,而且很复杂、不直观。

  本文介绍一种方法,可以在RAD可视化设计界面中直接指定控件的状态,并只用很简单的代码来切换状态。

  首先,定义一个类UiState,类中只有一个属性“IsEnabled”,用于指定当前控件的禁止状态:


.NET2.0中一种简单的窗口控件状态控制法 class UiState
.NET2.0中一种简单的窗口控件状态控制法.NET2.0中一种简单的窗口控件状态控制法 .NET2.0中一种简单的窗口控件状态控制法{
.NET2.0中一种简单的窗口控件状态控制法 private bool isEnabled;
.NET2.0中一种简单的窗口控件状态控制法
.NET2.0中一种简单的窗口控件状态控制法 public bool IsEnabled
.NET2.0中一种简单的窗口控件状态控制法.NET2.0中一种简单的窗口控件状态控制法 .NET2.0中一种简单的窗口控件状态控制法{
.NET2.0中一种简单的窗口控件状态控制法.NET2.0中一种简单的窗口控件状态控制法 get .NET2.0中一种简单的窗口控件状态控制法{ return isEnabled; }
.NET2.0中一种简单的窗口控件状态控制法.NET2.0中一种简单的窗口控件状态控制法 set .NET2.0中一种简单的窗口控件状态控制法{ isEnabled = value; }
.NET2.0中一种简单的窗口控件状态控制法 }
.NET2.0中一种简单的窗口控件状态控制法 }
.NET2.0中一种简单的窗口控件状态控制法
.NET2.0中一种简单的窗口控件状态控制法   然后编译。必须编译一次,否则RAD界面不知道有这个类存在。

  接下来,到DataSources侧栏中点“增加新数据源”,并在向导中选择“Object”,按下一步:



  选择“UiState”,按“Finish”:


  再回到窗口的设计界面,依次设置需要改变状态的控件。

  如下图,选中某个控件,到属性页中,展开(DataBindings),启动(Advanced)设置窗口,选择“Enabled”属性,并在Binding中选择“uiStateBindingSource - IsEnabled”。



  如下图,可以在设计窗口检查绑定状态:


  最后增加Enable和Disable按钮的处理函数:

.NET2.0中一种简单的窗口控件状态控制法 private UiState uiState = new UiState();
.NET2.0中一种简单的窗口控件状态控制法
.NET2.0中一种简单的窗口控件状态控制法 public Form1() // 构造函数
.NET2.0中一种简单的窗口控件状态控制法.NET2.0中一种简单的窗口控件状态控制法 .NET2.0中一种简单的窗口控件状态控制法{
.NET2.0中一种简单的窗口控件状态控制法 InitializeComponent();
.NET2.0中一种简单的窗口控件状态控制法 uiStateBindingSource.DataSource = uiState; // 必须!!!
.NET2.0中一种简单的窗口控件状态控制法 }
.NET2.0中一种简单的窗口控件状态控制法
.NET2.0中一种简单的窗口控件状态控制法 private void EnableOrDisable(bool state)
.NET2.0中一种简单的窗口控件状态控制法.NET2.0中一种简单的窗口控件状态控制法 .NET2.0中一种简单的窗口控件状态控制法{
.NET2.0中一种简单的窗口控件状态控制法 uiState.IsEnabled = state;
.NET2.0中一种简单的窗口控件状态控制法 uiStateBindingSource.ResetCurrentItem();
.NET2.0中一种简单的窗口控件状态控制法 }
.NET2.0中一种简单的窗口控件状态控制法 private void btnEnable_Click(object sender, EventArgs e)
.NET2.0中一种简单的窗口控件状态控制法.NET2.0中一种简单的窗口控件状态控制法 .NET2.0中一种简单的窗口控件状态控制法{
.NET2.0中一种简单的窗口控件状态控制法 EnableOrDisable(true);
.NET2.0中一种简单的窗口控件状态控制法 }
.NET2.0中一种简单的窗口控件状态控制法
.NET2.0中一种简单的窗口控件状态控制法 private void btnDisable_Click(object sender, EventArgs e)
.NET2.0中一种简单的窗口控件状态控制法.NET2.0中一种简单的窗口控件状态控制法 .NET2.0中一种简单的窗口控件状态控制法{
.NET2.0中一种简单的窗口控件状态控制法 EnableOrDisable(false);
.NET2.0中一种简单的窗口控件状态控制法 }

  运行,测试OK:


 

  总结:

  对于简单的控制逻辑来说,硬编码的方式比较适合。

  但对于稍微复杂一些的控制逻辑来说,还是这种方式比较适用。因为这种方式比较灵活,并且可以直观的在设计界面上进行修改,代码也显得简洁,可读性强。

  遗憾的是,菜单项和工具栏项不是可绑定的,所以本文介绍的方式无效。而通常使用中,菜单和工具栏偏偏又是控制逻辑最复杂的。唯一的办法,只能是自定义一个Actions控件,并采用本文类似的逻辑,通过Reflection机制对菜单项和工具栏进行绑定。Delphi的Actions控件就做的相当不错。进入讨论组讨论。

上一篇:Web应用的UML建模与.NET框架开发 人气:719
下一篇:.NET 2.0里使用强类型数据创建多层应用 人气:422
浏览全部软件工程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐