昨天晚上回寢室看到室友正在被乙個c#課的作業苦惱,作業的內容是編寫乙個口算訓練程式,能夠實現隨意新增題目數量。於是,喜歡寫c#的我就決定解救一下他們。
建立動態控制項
既然要動態新增,那就必須使用動態控制項了。在c#中,控制項也是類,除了在畫窗體的時候新增固定的控制項外,還可以在**中用例項化類的方法新增。
具體操作是,我們先定義乙個控制項變數,然後對控制項設定size, location這些屬性,最後,再把控制項新增的乙個panel中。而且我們只要定義一次控制項變數,之後用new不停的新增,就可以獲得很多控制項了。
部分**如下
txtbox = new textbox();在窗體中手動繪製的控制項,我們可以通過控制項名直接訪問,但是動態新增的控制項就不可以了,只能在panel中查詢對應name屬性的控制項。txtbox.size = new size(50, 50); //設定大小
txtbox.location = new point(x, y); //設定位置座標
txtbox.name = "txt" + convert.tostring(i); //設定控制項名(可重名)
panelquestion.controls.add(txtbox);
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;本作品由www.imyzf.com/?p=15創作,採用知識共享署名 4.0 國際許可協議進行許可。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 = "×";}}
}}
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....