春風博客

          春天里,百花香...

          導航

          <2015年12月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          統計

          公告

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

          Locations of visitors to this page

          常用鏈接

          留言簿(11)

          隨筆分類(224)

          隨筆檔案(126)

          個人軟件下載

          我的其它博客

          我的鄰居們

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          在C# WinForm程序中創建控件數組及相應的事件處理

          控件數組是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來得到相應控件.


          posted on 2007-08-04 08:18 sitinspring 閱讀(8021) 評論(2)  編輯  收藏 所屬分類: Object Orient Programming

          評論

          # re: 在C# WinForm程序中創建控件數組及相應的事件處理[未登錄] 2009-03-29 15:50 Pony

          萬一Text屬性的屬性值有相同,應該如何處理,最好能夠知道當前元素在數組中的下標  回復  更多評論   

          # re: 在C# WinForm程序中創建控件數組及相應的事件處理 2015-12-16 11:52 xl

          謝謝分享!你幫了我一個大忙!大贊!~~~~~~~~~~~~~~~~~
          cool  回復  更多評論   

          sitinspring(http://www.aygfsteel.com)原創,轉載請注明出處.
          主站蜘蛛池模板: 玛沁县| 龙门县| 当雄县| 疏勒县| 嘉鱼县| 灵宝市| 奉节县| 高阳县| 嘉定区| 逊克县| 璧山县| 凤冈县| 灵台县| 精河县| 彰化市| 本溪| 翁源县| 甘洛县| 万州区| 濮阳市| 金寨县| 沭阳县| 隆子县| 宜都市| 乌拉特后旗| 利辛县| 长白| 平阳县| 游戏| 岳阳县| 白河县| 恩平市| 宣威市| 深水埗区| 佛山市| 云安县| 孟连| 阿瓦提县| 枞阳县| 崇州市| 蓬溪县|