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

翻译|其它|编辑:郝浩|2007-09-18 10:03:07.000|阅读 694 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

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

假如有如下的窗口:

当按下  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  可视化设计界面中直接指定控件的状态,并只用很简单的代码来切换状态。

 

首先,定义一个类  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  控件就做的相当不错。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:沐枫网志

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP