標籤:winform blog http java io width for re
控制項數組是VB提供的一個優秀的設計解決方案,它能很方便快捷的處理大批同類控制項的響應和時間處理,但不知為什麼在C#中這個優秀特性沒有傳承下來,甚為可惜,本文將要探討就是如何在C# WinForm程式實現它.
首先請看介面
在上面的介面中,本人想實現一個42個元素的Button數組來實現一個日曆的功能,上面顯示出了一部分. 其中採用了網格布局來放置這些按鈕.
手工建立為全部按鈕後,在表單類中代碼中定義成員變數控制項數組: private Button[] btns;
然後在建構函式中初始化: btns = new Button[42];
btns[0] = this.button1; btns[1] = this.button2; ...... btns[40] = this.button41; btns[41] = this.button42;
大家不禁要問了,如果採用動態建立豈不更好.其實不然,我採用手工建立的主要原因是手工放置調整按鈕的位置和大小較為方便,如果動態建立出來的話,把他們放到介面上比較麻煩,尤其是在比較複雜的布局中.
然後是為上述數組中的各個控制項添加事件: for (int i = 0; i < btns.Length;i++ ) { btns[i].Click += new System.EventHandler(this.btns_Click); } 如果是要根據下標添加不同事件也可以的,做一些分支即可. C#的這種做法類似JavaSwing中AddActionListener做法,發揮以下我們也可用C#實現MVC.
最後定義btns_Click事件處理函數就行了: // 按鈕數組的事件處理 private void btns_Click(object sender, System.EventArgs e){ String[] arrs = ((Button)sender).Text.Split(‘\n‘);
String day = arrs[0];
if (day.Length < 2) { day = "0" + day; }
String date = currMonthLbl.Text + "-" + day;
mainForm.RefreshDatePanel(date); }
從上面可以看出,將sender用Button強制轉化一下就能得到事件對應的控制項,然後根據它的Text屬性可以進行唯一性判斷,其後再進行單獨處理即可.
總結起來,在C#中建立控制項數組很簡單,首先在類中建立一個控制項類型的數組,然後初始化它,具體初始化是動態建立還是連結到已有控制項可以根據情況自行選擇,然後為數組元素添加事件,最後實現事件即可,在事件實現中即可以通過轉化sender來得到相應控制項.