.NET20 一种简单的窗口控件UI状态控制方法

转载 2007年09月17日 17:32:00
 
我们经常需要控制窗口控件的状态。比如,在某些情况下,需要禁止一部份控件,或让一部份控件呈只读状态等等。
        假如有如下的窗口:
       

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

        private void EnableOrDisable(bool isEnabled)
        
{
            
this.button1.Enabled = isEnabled;
            
this.checkBox1.Enabled = isEnabled;
            
this.comboBox1.Enabled = isEnabled;
            
this.textBox1.Enabled = isEnabled;
        }


        
private void btnEnable_Click(object sender, EventArgs e)
        
{
            EnableOrDisable(
true);
        }


        
private void btnDisable_Click(object sender, EventArgs e)
        
{
            EnableOrDisable(
false);
        }


        这样的作法,在一些简单的逻辑控制倒也行的通。但是一旦控件的数量比较多,而控制逻辑也比较复杂的时候,类似EnableOrDisable的函数将会变得很多,而且很复杂、不直观。
        本文介绍一种方法,可以在RAD可视化设计界面中直接指定控件的状态,并只用很简单的代码来切换状态。

.NET20 一种简单的窗口控件UI状态控制方法    沐枫网志

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

    class UiState
    
{
        
private bool isEnabled;

        
public bool IsEnabled
        
{
            
get return isEnabled; }
            
set { isEnabled = value; }
        }
 
    }



        然后编译。必须编译一次,否则RAD界面不知道有这个类存在。
        接下来,到DataSources侧栏中点“增加新数据源”,并在向导中选择“Object”,按下一步:

 

        选择“UiState”,按“Finish”:

 

        再回到窗口的设计界面,依次设置需要改变状态的控件。
        如下图,选中某个控件,到属性页中,展开(DataBindings),启动(Advanced)设置窗口,选择“Enabled”属性,并在Binding中选择“uiStateBindingSource - IsEnabled”。
 

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

 

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

        private UiState uiState = new UiState();

        
public Form1()  // 构造函数
        {
            InitializeComponent();
            uiStateBindingSource.DataSource 
= uiState; // 必须!!!
        }


        
private void EnableOrDisable(bool state)
        
{
            uiState.IsEnabled 
= state;
            uiStateBindingSource.ResetCurrentItem();
        }

        
private void btnEnable_Click(object sender, EventArgs e)
        
{
            EnableOrDisable(
true);
        }


        
private void btnDisable_Click(object sender, EventArgs e)
        
{
            EnableOrDisable(
false);
        }

 

        运行,测试OK:
  
 
        总结:
        对于简单的控制逻辑来说,硬编码的方式比较适合。
        但对于稍微复杂一些的控制逻辑来说,还是这种方式比较适用。因为这种方式比较灵活,并且可以直观的在设计界面上进行修改,代码也显得简洁,可读性强。
        遗憾的是,菜单项和工具栏项不是可绑定的,所以本文介绍的方式无效。而通常使用中,菜单和工具栏偏偏又是控制逻辑最复杂的。唯一的办法,只能是自定义一个Actions控件,并采用本文类似的逻辑,通过Reflection机制对菜单项和工具栏进行绑定。Delphi的Actions控件就做的相当不错。


来源:互连网 作者:沐枫网志

.NET20 一种简单的窗口控件UI状态控制方法

        我们经常需要控制窗口控件的状态。比如,在某些情况下,需要禁止一部份控件,或让一部份控件呈只读状态等等。        假如有如下的窗口:                当按下Enabl...
  • killer000777
  • killer000777
  • 2006年12月25日 15:15
  • 674

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

我们经常需要控制窗口控件的状态。比如,在某些情况下,需要禁止一部份控件,或让一部份控件呈只读状态等等。         假如有如下的窗口:                 当按下Enable时,左侧的...
  • Milozsj
  • Milozsj
  • 2008年06月17日 16:18
  • 489

封装一个UI控件的范例

用户需求一览 申请者满天星 项目大致代码行数1000 项目 GitHub 地址 项目备注 封装自己的UI空间需要注意哪些地方? 封装第三方A...
  • sunnyboy9
  • sunnyboy9
  • 2016年02月25日 22:16
  • 1691

对付API-splicing的一种简单方法

 对于拦截API函数通常使用一种叫splicing的方法。此法的本质就是用JMP指令替换函数起始处的5个字节,将控制权传递给拦截程序。这种技术广泛应用于个人防火墙中,以防木马程序将自己的代码注入到其它...
  • iiprogram
  • iiprogram
  • 2007年04月25日 22:40
  • 696

常用UI控件和常用类

1.UILabel、UISwitch、UISlider、UIPageControl、UIActivityIndicatorView 、UIProgressView、
  • jia611
  • jia611
  • 2014年05月23日 15:13
  • 1611

c# wpf下的多线程操作窗口UI控件的过程

 2010-04-11 01:22:10|  分类: IT |  标签: |举报 |字号大中小 订阅 wpf下的多线程操作窗口UI控件的过...
  • liuqiaoying_lqy
  • liuqiaoying_lqy
  • 2014年10月13日 16:32
  • 3562

如何控制其他程序窗体上的窗口控件(下)

实在不好意思,写了上,中后,由于一直忙于项目,就没有完成最关键的工作。导致很多网友给我发邮件询问答案。同时对某些人发表的评论感觉到很伤心,本来就申明了文章写的很浅薄无知,很罗里八嗦的,并且将自己的心得...
  • VBEND
  • VBEND
  • 2005年01月11日 10:23
  • 1646

VC 如何在线程里调用主窗口的控件。

 UINT ThreadFunc(LPVOID pParam);AfxBeginThread(ThreadFunc,GetSafeHwnd(),THREAD_PRIORITY_NORMAL);//调用...
  • thanato
  • thanato
  • 2007年10月28日 18:52
  • 2413

c 几个简单的窗口操作代码

(本人运行过,均可运行) http://blog.163.com/wang_1980_ww/blog/static/1111410520111119111543930/ 第一个:FindW...
  • xy707707
  • xy707707
  • 2015年05月22日 22:12
  • 485

Unity--UI控件

基础组件: 注:具体属性查看https://docs.unity3d.com/Manual/script-Text.html官方文档 RectTransform组件: Width/Height:矩形...
  • QQ1170836331
  • QQ1170836331
  • 2017年10月26日 16:07
  • 279
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:.NET20 一种简单的窗口控件UI状态控制方法
举报原因:
原因补充:

(最多只允许输入30个字)