C 實現控制項陣列

2021-09-06 05:19:30 字數 2489 閱讀 9720

dotnet裡取消了控制項陣列,這讓習慣了使用vb控制項的程式設計師非常不適應。有什麼辦法能夠實現控制項陣列的功能嗎?答案是肯定的。

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

新建乙個工程,在窗體上新增5個textbox(textbox1...textbox5)和2個button (button1、button2)。

1.迴圈附值

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

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

private void button1_click(object sender, system.eventargs e)

}1.2 利用窗體的控制項陣列。因為窗體裡的控制項,都被包括在control裡面,所以可以根據其類別加以區分。**如下:

private void button2_click(object sender, system.eventargs e)}}

2.事件響應

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

自定義乙個控制項事件-- textbox_keypress ,**如下:

private void textbox_keypress(object sender, system.windows.forms.keypresseventargs e)

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

用c#實現簡單的控制項陣列

我的乙個同學在做計算器程式,另乙個同學在做井字棋遊戲。這兩個程式有個共同的特點:包含數個具有同類功能的控制項(計算器的數字按鈕及井字棋的九個落子位)。如果乙個個地建立這些控制項,不得不寫大量重複的**,修改起來比較麻煩。乙個更好的選擇是建立控制項陣列。下面是button陣列的簡單實現:

button btns = new button[9];

private void showbuttonarray()

}private void btns_click(object sender, system.eventargs e)

private void form1_load(object sender, system.eventargs e)

事實上,大家只要看一遍「windows 窗體設計器生成的**」,就很快能理解.net建立並呈現控制項的過程,從而寫出簡單的控制項陣列。在上例中,button呈現的位置是通過乙個的公式計算出的,在實際的運用中,可以根據需要靈活變化(比如計算器的數字按鈕,1~9可以用公式算出,0則可以用if之類的語句特殊處理)。同時值得注意的是對事件的統一處理:在btns_click函式中通過sender判斷激發事件的控制項。

如果有必要,可以將控制項陣列封裝成類,加上一定的功能**,便於靈活使用。甚至可以將一些自定義控制項做成陣列類,實現更加複雜的功能。

給你舉個例子吧:

在某個form的某個方法中:

//先建立陣列

label lblarray = ;

//設定屬性

lblarray[0].location = new system.drawing.point(132, 280);

lblarray[0].name = "label_0";

lblarray[0].size = new system.drawing.size(64, 16);

lblarray[0].tabindex = 1;

lblarray[0].text = "label_0";

lblarray[1].location = new system.drawing.point(232, 280);

lblarray[1].name = "label_1";

lblarray[1].size = new system.drawing.size(64, 16);

lblarray[1].tabindex = 2;

lblarray[1].text = "label_1";

//最後一條語句尤其重要,如果不寫,則控制項不能在窗體上顯示。

this.controls.addrange(lblarray);  

逐個自己寫**啊,太煩了吧,看看這樣行不行:

private system.windows.forms.button ba=;

private void init()

這樣你大可以先在窗體上設計好你的控制項,不用自己寫**。

C 實現控制項陣列

dotnet裡取消了控制項陣列,這讓習慣了使用vb控制項的程式設計師非常不適應。有什麼辦法能夠實現控制項陣列的功能嗎?答案是肯定的。眾所周知,控制項陣列最主要的兩個優點 可以迴圈附值 可以響應同乙個事件。從而大大簡化了 下面根據這兩個方面,舉乙個例子。新建乙個工程,在窗體上新增5個textbox t...

在C 程式中建立控制項陣列

要在窗體中顯示控制項就先要建立它,比如乙個 bottom 控制項,在c 中所有的控制項都是繼承基類的子類,自然 bottom 也是乙個類。那麼建立乙個 bottom 類的陣列,必需要例項化才行。bottom btnarray new bottom 10 像建立陣列一樣,簡單吧,嘿嘿。for int ...

C 做的乙個日期控制項,用控制項陣列做的

c 做的乙個日期控制項,用控制項陣列做的 using system using system.drawing using system.collections using system.componentmodel using system.windows.forms using system.da...