春風(fēng)博客

          春天里,百花香...

          導(dǎo)航

          <2007年8月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          統(tǒng)計(jì)

          公告

          MAIL: junglesong@gmail.com
          MSN: junglesong_5@hotmail.com

          Locations of visitors to this page

          常用鏈接

          留言簿(11)

          隨筆分類(lèi)(224)

          隨筆檔案(126)

          個(gè)人軟件下載

          我的其它博客

          我的鄰居們

          最新隨筆

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          在C# WinForm程序中創(chuàng)建控件數(shù)組及相應(yīng)的事件處理

          控件數(shù)組是VB提供的一個(gè)優(yōu)秀的設(shè)計(jì)解決方案,它能很方便快捷的處理大批同類(lèi)控件的響應(yīng)和時(shí)間處理,但不知為什么在C#中這個(gè)優(yōu)秀特性沒(méi)有傳承下來(lái),甚為可惜,本文將要探討就是如何在C# WinForm程序?qū)崿F(xiàn)它.

          首先請(qǐng)看界面


          在上面的界面中,本人想實(shí)現(xiàn)一個(gè)42個(gè)元素的Button數(shù)組來(lái)實(shí)現(xiàn)一個(gè)日歷的功能,上面顯示出了一部分.
          其中采用了網(wǎng)格布局來(lái)放置這些按鈕.

          手工創(chuàng)建為全部按鈕后,在窗體類(lèi)中代碼中定義成員變量控件數(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;

          大家不禁要問(wèn)了,如果采用動(dòng)態(tài)創(chuàng)建豈不更好.其實(shí)不然,我采用手工創(chuàng)建的主要原因是手工放置調(diào)整按鈕的位置和大小較為方便,如果動(dòng)態(tài)創(chuàng)建出來(lái)的話(huà),把他們放到界面上比較麻煩,尤其是在比較復(fù)雜的布局中.

          然后是為上述數(shù)組中的各個(gè)控件添加事件:
          for (int i = 0; i < btns.Length;i++ )
           {
                  btns[i].Click += new System.EventHandler(this.btns_Click);
          }
          如果是要根據(jù)下標(biāo)添加不同事件也可以的,做一些分支即可.
          C#的這種做法類(lèi)似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é)起來(lái),在C#中創(chuàng)建控件數(shù)組很簡(jiǎn)單,首先在類(lèi)中創(chuàng)建一個(gè)控件類(lèi)型的數(shù)組,然后初始化它,具體初始化是動(dòng)態(tài)創(chuàng)建還是鏈接到已有控件可以根據(jù)情況自行選擇,然后為數(shù)組元素添加事件,最后實(shí)現(xiàn)事件即可,在事件實(shí)現(xiàn)中即可以通過(guò)轉(zhuǎn)化sender來(lái)得到相應(yīng)控件.


          posted on 2007-08-04 08:18 sitinspring 閱讀(8025) 評(píng)論(2)  編輯  收藏 所屬分類(lèi): Object Orient Programming

          評(píng)論

          # re: 在C# WinForm程序中創(chuàng)建控件數(shù)組及相應(yīng)的事件處理[未登錄](méi) 2009-03-29 15:50 Pony

          萬(wàn)一Text屬性的屬性值有相同,應(yīng)該如何處理,最好能夠知道當(dāng)前元素在數(shù)組中的下標(biāo)  回復(fù)  更多評(píng)論   

          # re: 在C# WinForm程序中創(chuàng)建控件數(shù)組及相應(yīng)的事件處理 2015-12-16 11:52 xl

          謝謝分享!你幫了我一個(gè)大忙!大贊!~~~~~~~~~~~~~~~~~
          cool  回復(fù)  更多評(píng)論   

          sitinspring(http://www.aygfsteel.com)原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處.
          主站蜘蛛池模板: 文化| 望都县| 沁水县| 正镶白旗| 准格尔旗| 祁东县| 大冶市| 蓬安县| 黄浦区| 鹤壁市| 方正县| 台前县| 甘肃省| 方山县| 通河县| 略阳县| 绥芬河市| 牟定县| 沁水县| 卫辉市| 遂宁市| 盖州市| 绥棱县| 桃源县| 博客| 肥城市| 昔阳县| 如皋市| 施甸县| 靖宇县| 西吉县| 白城市| 六安市| 昌宁县| 治多县| 镇巴县| 喜德县| 清涧县| 沈阳市| 仁化县| 阿瓦提县|