控件數(shù)組是VB提供的一個(gè)優(yōu)秀的設(shè)計(jì)解決方案,它能很方便快捷的處理大批同類控件的響應(yīng)和時(shí)間處理,但不知為什么在C#中這個(gè)優(yōu)秀特性沒有傳承下來,甚為可惜,本文將要探討就是如何在C# WinForm程序?qū)崿F(xiàn)它.首先請(qǐng)看界面 在上面的界面中,本人想實(shí)現(xiàn)一個(gè)42個(gè)元素的Button數(shù)組來實(shí)現(xiàn)一個(gè)日歷的功能,上面顯示出了一部分. 其中采用了網(wǎng)格布局來放置這些按鈕.手工創(chuàng)建為全部按鈕后,在窗體類中代碼中定義成員變量控件數(shù)組: PRivate Button[] btns;然后在構(gòu)造函數(shù)中初始化: btns = new Button[42];
btns[0] = this.button1; btns[1] = this.button2; ...... btns[40] = this.button41; btns[41] = this.button42;大家不禁要問了,如果采用動(dòng)態(tài)創(chuàng)建豈不更好.其實(shí)不然,我采用手工創(chuàng)建的主要原因是手工放置調(diào)整按鈕的位置和大小較為方便,如果動(dòng)態(tài)創(chuàng)建出來的話,把他們放到界面上比較麻煩,尤其是在比較復(fù)雜的布局中.然后是為上述數(shù)組中的各個(gè)控件添加事件: for (int i = 0; i < btns.Length;i++ ) { btns[i].Click += new System.EventHandler(this.btns_Click); } 如果是要根據(jù)下標(biāo)添加不同事件也可以的,做一些分支即可. C#的這種做法類似javaSwing中AddActionListener做法,發(fā)揮以下我們也可用C#實(shí)現(xiàn)MVC.最后定義btns_Click事件處理函數(shù)就行了: // 按鈕數(shù)組的事件處理 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強(qiáng)制轉(zhuǎn)化一下就能得到事件對(duì)應(yīng)的控件,然后根據(jù)它的Text屬性可以進(jìn)行唯一性判斷,其后再進(jìn)行單獨(dú)處理即可.總結(jié)起來,在C#中創(chuàng)建控件數(shù)組很簡(jiǎn)單,首先在類中創(chuàng)建一個(gè)控件類型的數(shù)組,然后初始化它,具體初始化是動(dòng)態(tài)創(chuàng)建還是鏈接到已有控件可以根據(jù)情況自行選擇,然后為數(shù)組元素添加事件,最后實(shí)現(xiàn)事件即可,在事件實(shí)現(xiàn)中即可以通過轉(zhuǎn)化sender來得到相應(yīng)控件.
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注