C#實現控制元件陣列 (轉)

amyz發表於2007-11-12
C#實現控制元件陣列 (轉)[@more@]

 裡取消了陣列,這讓習慣了使用VB控制元件的員非常不適應。有什麼辦法能夠實現控制元件陣列的功能嗎?答案是肯定的。

  眾所周知,控制元件陣列最主要的兩個優點:可以迴圈附值;可以響應同一個事件。從而大大簡化了程式碼。下面根據這兩個方面,舉一個例子。

  新建一個工程,在窗體上新增5個textbox(textBox1...textBox5)和2個button (button1、button2)。

  1.迴圈附值

 總的來說,有兩種實現方法:

  1.1 定義動態的控制元件陣列。因為DotNet裡支援動態的控制元件陣列,所以我們可以把已設計好的控制元件,附給動態的陣列,這樣就可以任意的使用了。程式碼如下:

  private void button1_Click( sender, System.EventArgs e)

  {
  TextBox[] myTextBox = new TextBox[5];
  myTextBox[0] = textBox1;
 myTextBox[1] = textBox2;
  myTextBox[2] = textBox3;
  myTextBox[3] = textBox4;
  myTextBox[4] = textBox5;

  for ( int i=0;i< 5;i++)
  {
  myTextBox[i].Text = "fill_1";
  }
  }

  1.2 利用窗體的控制元件陣列。因為窗體裡的控制元件,都被包括在Control裡面,所以可以根據其類別加以區分。程式碼如下:

  private void button2_Click(object sender, System.EventArgs e)
  {
  foreach(Control myControls in this.Controls)
  {
    if (myControls.ToString().IndexOf("TextBox") > 0 )
 {
  myControls.Text ="fill_2";
 }

  }
  }

 2.事件響應

  讓陣列裡的控制元件都響應同一個相應的事件,透過起在陣列裡唯一的標識,再將他們加以區分。下面一個例子,使5個textBox響應同一個keypress事件。

 自定義一個控制元件事件-- textBox_KeyPress ,程式碼如下:

  private void textBox_KeyPress(object sender, System..Forms.KeyPressEventArgs e)
 {
  TextBox box = (TextBox)sender;
 
  MessageBox.Show(this,"you choose " + box.Name + " and you keypress " + e.KeyChar.ToString() ,"try" ,MessageBoxButtons.OK );
  }

  選定textBox1,按F4顯示其屬性頁,選擇"Events"按鈕(就是那個小閃電),列出了textBox1的所有事件,在keypress裡寫我們想讓他相應的事件的名字--textBox_KeyPress,這樣,當textBox1產生keypress事件時,他相應的是textBox_KeyPress這個我們自定義的事件。同樣,對其它的textBox控制元件也做如上的屬性設定。這樣,5個textBox同時響應一個keypress事件,而可以透過object sender的不同,可以加以區分。這樣就達到了陣列的效果。

  以上是根據本人的一點總結而得,如果有其他好的方法,歡迎探討。

 

  minajo21(大眼睛)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-981881/,如需轉載,請註明出處,否則將追究法律責任。

相關文章