国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法

2019-11-17 04:41:03
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  我們經(jīng)常需要控制窗口控件的狀態(tài)。比如,在某些情況下,需要禁止一部份控件,或讓一部份控件呈只讀狀態(tài)等等。

  假如有如下的窗口:


  當(dāng)按下Enable時(shí),左側(cè)的所有控件都要禁止(Enabled=false),當(dāng)按下Disable時(shí),左側(cè)的所有控件都取消禁止(Enabled=true)。
通常的作法是直接用代碼來(lái)控制:

.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 PRivate void EnableOrDisable(bool isEnabled)
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 .NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法{
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 this.button1.Enabled = isEnabled;
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 this.checkBox1.Enabled = isEnabled;
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 this.comboBox1.Enabled = isEnabled;
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 this.textBox1.Enabled = isEnabled;
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 }
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 private void BTnEnable_Click(object sender, EventArgs e)
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 .NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法{
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 EnableOrDisable(true);
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 }
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 private void btnDisable_Click(object sender, EventArgs e)
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 .NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法{
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 EnableOrDisable(false);
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 }

  這樣的作法,在一些簡(jiǎn)單的邏輯控制倒也行的通。但是一旦控件的數(shù)量比較多,而控制邏輯也比較復(fù)雜的時(shí)候,類(lèi)似EnableOrDisable的函數(shù)將會(huì)變得很多,而且很復(fù)雜、不直觀。

  本文介紹一種方法,可以在RAD可視化設(shè)計(jì)界面中直接指定控件的狀態(tài),并只用很簡(jiǎn)單的代碼來(lái)切換狀態(tài)。

  首先,定義一個(gè)類(lèi)UiState,類(lèi)中只有一個(gè)屬性“IsEnabled”,用于指定當(dāng)前控件的禁止?fàn)顟B(tài):


.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 class UiState
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 .NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法{
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 private bool isEnabled;
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 public bool IsEnabled
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 .NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法{
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 get .NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法{ return isEnabled; }
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 set .NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法{ isEnabled = value; }
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 }
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 }
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法   然后編譯。必須編譯一次,否則RAD界面不知道有這個(gè)類(lèi)存在。

  接下來(lái),到DataSources側(cè)欄中點(diǎn)“增加新數(shù)據(jù)源”,并在向?qū)е羞x擇“Object”,按下一步:



  選擇“UiState”,按“Finish”:


  再回到窗口的設(shè)計(jì)界面,依次設(shè)置需要改變狀態(tài)的控件。

  如下圖,選中某個(gè)控件,到屬性頁(yè)中,展開(kāi)(DataBindings),啟動(dòng)(Advanced)設(shè)置窗口,選擇“Enabled”屬性,并在Binding中選擇“uiStateBindingSource - IsEnabled”。



  如下圖,可以在設(shè)計(jì)窗口檢查綁定狀態(tài):


  最后增加Enable和Disable按鈕的處理函數(shù):

.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 private UiState uiState = new UiState();
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 public Form1() // 構(gòu)造函數(shù)
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 .NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法{
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 InitializeComponent();
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 uiStateBindingSource.DataSource = uiState; // 必須!!!
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 }
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 private void EnableOrDisable(bool state)
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 .NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法{
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 uiState.IsEnabled = state;
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 uiStateBindingSource.ResetCurrentItem();
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 }
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 private void btnEnable_Click(object sender, EventArgs e)
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 .NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法{
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 EnableOrDisable(true);
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 }
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 private void btnDisable_Click(object sender, EventArgs e)
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 .NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法{
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 EnableOrDisable(false);
.NET2.0中一種簡(jiǎn)單的窗口控件狀態(tài)控制法 }

  運(yùn)行,測(cè)試OK:


 

  總結(jié):

  對(duì)于簡(jiǎn)單的控制邏輯來(lái)說(shuō),硬編碼的方式比較適合。

  但對(duì)于稍微復(fù)雜一些的控制邏輯來(lái)說(shuō),還是這種方式比較適用。因?yàn)檫@種方式比較靈活,并且可以直觀的在設(shè)計(jì)界面上進(jìn)行修改,代碼也顯得簡(jiǎn)潔,可讀性強(qiáng)。

  遺憾的是,菜單項(xiàng)和工具欄項(xiàng)不是可綁定的,所以本文介紹的方式無(wú)效。而通常使用中,菜單和工具欄偏偏又是控制邏輯最復(fù)雜的。唯一的辦法,只能是自定義一個(gè)Actions控件,并采用本文類(lèi)似的邏輯,通過(guò)Reflection機(jī)制對(duì)菜單項(xiàng)和工具欄進(jìn)行綁定。Delphi的Actions控件就做的相當(dāng)不錯(cuò)。進(jìn)入討論組討論。


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 泸定县| 卓尼县| 武城县| 舟曲县| 贵溪市| 栾城县| 林芝县| 四子王旗| 上林县| 客服| 徐水县| 松溪县| 莱西市| 锦屏县| 株洲市| 乌拉特后旗| 政和县| 巴林右旗| 青河县| 安阳县| 临西县| 宜黄县| 缙云县| 龙川县| 松潘县| 类乌齐县| 司法| 玉龙| 海安县| 辉南县| 平山县| 崇左市| 荣成市| 屯留县| 社会| 阜宁县| 连云港市| 南漳县| 巴南区| 扶风县| 和硕县|