.NET20 一种简单的窗口控件UI状态控制方法
2006-12-25 15:15
531 查看
我们经常需要控制窗口控件的状态。比如,在某些情况下,需要禁止一部份控件,或让一部份控件呈只读状态等等。
假如有如下的窗口:
当按下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控件就做的相当不错。
假如有如下的窗口:
当按下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状态控制方法
- .NET20 一种简单的窗口控件UI状态控制方法
- .NET20 一种简单的窗口控件UI状态控制方法
- .NET2.0 一种简单的窗口控件UI状态控制方法
- 写一个方法进行各种属性的更新,而不要每个界面设置改变都改变一个属性。就是点击应用或确定按钮时调用这个更新属性的方法,遍历所有(控制对象属性的)界面控件的状态(值),进行属性修改和刷新。
- 解决列表框更新数据的时候的闪烁问题(VC防止窗口及其控件(如CListCtrl)闪烁的简单方法(一组有用的宏) )
- B/S系统权限控制的一种简单方法
- 子窗口控制父窗口一种简便的方法
- VC++中对对话框中控件的控制的一种实现方法(适合初学者看)
- C++(MFC)中WebBrowser去除3D边框的方法(实现IDocHostUIHandler接口)控制 WebBrowser 控件的外观和行为
- 布局控件"WeifenLuo.WinFormsUI.Docking"的使用--如何控制自动停靠窗口的大小
- QT自定义函数使用UI控件的简单方法
- 通过UI控制模型旋转的一种方法
- 【Android 开发】:UI控件之开关状态按钮 ToggleButton 的使用方法
- MFC 下给控件加载jpeg等非bmp图片的一种简单方法
- B/S系统权限控制的一种简单方法(转)
- Delphi 一种简单的二进制校验方法,适用于简单的权限管理或开关控制
- B/S系统权限控制的一种简单方法
- B/S系统权限控制的一种简单方法
- 再谈布局控件"WeifenLuo.WinFormsUI.Docking"的使用--如何控制自动停靠窗口的大小