控制項陣列分組速成法

  • 2268
  • 0

c#的控制項陣列和控制項分組

以前的VB支援控制項陣列,可以把控制項用INDEX去判斷,但是C#沒這功能(MSDN有範例寫新的CLASS繼承物件)。

https://www.microsoft.com.nsatc.net/taiwan/msdn/library/2002/Apr-2002/whitepaper/vbtchCreatingControlArraysInVisualBasicNETVisualCNET.htm

 

若是照文件另外寫CLASS,卻沒法子把控制項分組。於是想到了速成法。

 

pageTitle = new TextBox[] { dtxtbox1, stxtbox1, ttxtbox1 };//控制項陣列組成
pageURL = new TextBox[] { dtxtbox2, stxtbox2, ttxtbox2 };
pageState = new TextBox[] { dtxtbox3, stxtbox3, ttxtbox3 };
pagePath = new TextBox[] { txtboxDefault, txtboxSndUrl, txtboxThUrl };

而會分組的原因,通常是因為某個按鈕動作,會影響某一組控制項,所以要讓按鈕判斷做哪一組。

pagePath[INDEX].Text="ABCD";

用以上的語法就可以靠『來源』決定要去哪一組的哪一個控制項。

那『來源』怎麼決定的?若INDEX的來源都要寫死程式碼,那也太笨了。

通常來源都是BUTTON,那BUTTON要不要分組?

不用,但要動點手腳。

this.btnDefault.Click += new System.EventHandler(this.btn_Click);
this.btnSndUrl.Click += new System.EventHandler(this.btn_Click);
this.btnThUrl.Click += new System.EventHandler(this.btn_Click);

這個手腳就是要把Click事件的委派都指向同一個method。那怎麼分辨按下哪一個按鈕了呢?

秘密就在"tag"

btnDefault.Tag = "0";
btnSndUrl.Tag="1";
btnThUrl.Tag="2";

Tag是允許使用者額外設定的欄位,所以在這裡設定index,然後在btn_Click裡取用

switch (((Button)sender).Tag.ToString())
                {
                    case "0":
                        pagedefault[index].text="A";
                        break;
                    case "1":
                        pagesnd[index].text="B";
                        break;
                    case "2":
                        pageTh[index].text="C";
                        break;
                    default:
                        break;
                   }

把事件裡的sender強轉型成事件來源的控制項,就可以找到Tag。

但這裡要注意Tag的型別是object,要再轉成可用的型別。

以上的方法就可以做到控制項陣列,又可以分組,讓程式碼好看又不用拷一堆程式碼串。