C WinForm動態控制項例項 口算訓練

2022-08-28 03:09:09 字數 2667 閱讀 5454

昨天晚上回寢室看到室友正在被乙個c#課的作業苦惱,作業的內容是編寫乙個口算訓練程式,能夠實現隨意新增題目數量。於是,喜歡寫c#的我就決定解救一下他們。

建立動態控制項

既然要動態新增,那就必須使用動態控制項了。在c#中,控制項也是類,除了在畫窗體的時候新增固定的控制項外,還可以在**中用例項化類的方法新增。

具體操作是,我們先定義乙個控制項變數,然後對控制項設定size, location這些屬性,最後,再把控制項新增的乙個panel中。而且我們只要定義一次控制項變數,之後用new不停的新增,就可以獲得很多控制項了。

部分**如下

txtbox = new textbox();

txtbox.size = new size(50, 50); //設定大小

txtbox.location = new point(x, y); //設定位置座標

txtbox.name = "txt" + convert.tostring(i); //設定控制項名(可重名)

panelquestion.controls.add(txtbox);

在窗體中手動繪製的控制項,我們可以通過控制項名直接訪問,但是動態新增的控制項就不可以了,只能在panel中查詢對應name屬性的控制項。

string str = ((textbox)panelquestion.controls.find("txtbox" ,true)[0]).text;
find方法中的第乙個引數為控制項名稱,第二個引數為是否搜尋所以子控制項。由於可以重名,所以返回的是乙個控制項陣列,上面的[0]表示取第乙個返回結果。由於返回的型別是control,還需要強制轉換為具體的控制項型別,所以前面加了(textbox),強制轉換為textbox型別,這樣才能當做textbox使用。

窗體設計如上圖,控制項名稱分別為txttotal, btnadd, btnjudge, panelquestion

在出題按鈕事件中,進行進行動態新增textbox和label,每行3個textbox,顯示兩個加數和乙個空白框填寫結果,name都為txt+行號;還有三個label,從左到右為「+」、「=」和空白的用來顯示對錯。

在批改按鈕事件中,訪問已經動態建立的控制項,獲取textbox裡的值,然後進行批改,把對錯寫入每行最後乙個label中。

執行結果如下:

其他的不廢話了,貼**!

using system;

using system.collections.generic;

using system.componentmodel;

using system.data;

using system.drawing;

using system.linq;

using system.text;

using system.windows.forms;

namespace addprogram

private void btnadd_click(object sender, eventargs e)

//判斷題目數是否未填

panelquestion.autoscroll = true; //為panel新增滾動條

panelquestion.controls.clear(); //清空已有題目

int total = int.parse(txttotal.text); //題目總數

textbox txtbox = new textbox();

label label = new label();

random rand = new random(); //隨機數

for (int i = 0; i < total; i++)

//產生隨機數,作為加數

panelquestion.controls.add(txtbox); //把控制項加入到panel中

label = new label();

label.size = new size(12, 12);

label.location = new point(64 + 70 * j, 30 * i);

switch (j)

panelquestion.controls.add(label);}}

}private void btnjudge_click(object sender, eventargs e)

int total = convert.toint32(txttotal.text);

for (int i = 0; i < total; i++)

int add = convert.toint32(txtbox[0].text) + convert.toint32(txtbox[1].text);

if (add == convert.toint32(txtbox[2].text))

label.text = "√";

else

label.text = "×";}}

}}

本作品由www.imyzf.com/?p=15創作,採用知識共享署名 4.0 國際許可協議進行許可。

C Winform控制項動態刪除

wpf控制項的動態刪除請參考wpf動態刪除指定型別控制項 今天在實現控制項動態刪除過程中遇到了點小trouble,就是在刪除的過程中只能刪除一半,具體 如下 foreach var control in from ctls in controlutility.getcontrols panel1 w...

Silverlight動態生成控制項例項

剛學習silverlight,做了乙個動態建立控制項的例項 實現結果 根據已有的控制項類名稱,得到控制項的例項化物件 實現思路1 就是定義乙個模板檔案,將類名做為引數,在silverlight中使用sreamwriter生成對應的檔案,以便使用。但是,silverlight比較蛋疼的一點就是不能直接...

C winform 程式設計例項

一,textbox實現autocomplete功能 原始碼 包含自動完成的字串集合 autocompletestringcollection strings new autocompletestringcollection strings.add a strings.add abc strings....