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

王朝c#·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

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

假如有如下的窗口:

当按下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控件就做的相当不错。进入讨论组讨论。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航