c#的控制項陣列和控制項分組
以前的VB支援控制項陣列,可以把控制項用INDEX去判斷,但是C#沒這功能(MSDN有範例寫新的CLASS繼承物件)。
若是照文件另外寫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 };
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,要再轉成可用的型別。
以上的方法就可以做到控制項陣列,又可以分組,讓程式碼好看又不用拷一堆程式碼串。