1. 填空題
1) 使控件是否可以對用戶交互作出響應的屬性是 enabled 。
2) 控制控件是否顯示的屬性是 visible 。
3) 若要在文本框中輸入密碼,常指定 passwordchar 屬性。
4) 若某復選框某時刻checkstate屬性的值為indeterminate,則其屬性checked的值為 unchecked 。
5) 使用 panel 或 groupbox 控件可以將多個radiobutton控件分為兩個單選組。
6) 若不希望用戶在combobox控件中編輯文本,則應將屬性 dropdownstyle 的屬性值設置為dropdownlist。
7) 用于設置menustrip控件中某菜單項快捷鍵的屬性是 shortcutkeys 。
8) 用于控制listview控件中的各項顯示方式的屬性是 view 。
2. 判斷題
1) 控件就是屬性、方法和事件的集合封裝體。 ( 對 )
2) textbox控件只能用于單行文本的輸入。 ( 錯 )
3) 通過richtextbox控件只能夠與rtf文件進行交互操作。 ( 錯 )
4) checkbox控件的checked屬性與checkstate屬性的值始終是相同的。 ( 錯 )
5) tooltip組件用于顯示某指定控件的自定義提示信息的。 ( 對 )
3. 區別textbox控件、maskedtextbox控件、richtextbox控件的使用場合。
【解答】
textbox控件一般用于單段文本的編輯,可以設置為單行或多行的輸入模式,也可以用作密碼的輸入;maskedtextbox控件主要用于特定格式的單段文本編輯,在輸入文本不符合格式要求的將會觸發其maskinputrejected事件;richtextbox控件除了具有textbox的一般文本編輯功能外,還可以進行多段文本的高級編輯功能,如改變文本、段落的顯示格式、在文本中查找特定字符和字符串以及與rtf文件的交互等。
4. 簡要說明checkbox控件和radiobutton控件的區別。
【解答】
checkbox控件可為用戶提供選擇功能,常用的是二選一的選擇,如“真/假”或“是/否”;但該控件也可以通過屬性的設置作三選一的選擇。每一個checkbox所代表的選擇都是獨立的,若有多個checkbox控件構成一組選項時,則可以多個同時被選中,相互之間不影響,即復選。radiobutton控件,它與checkbox控件功能類似,也是用于接收用戶的選擇,但它是以單項選擇的形式出現,即一組radiobutton按鈕中只能有一個處于選中狀態。一旦某一項被選中,則同組中其他radiobutton按鈕的選中狀態自動清除。
5. 設計一個windows應用程序,窗體上有一個textbox控件、一個button控件。要求,每當用戶單擊按鈕時,文本框都會增加一行文字來反映單擊的次數,例如“第3次單擊按鈕”。
【解答】
1) 窗體界面如圖ex5-5-1所示;

2) 窗體中主要控件屬性設置如表ex5-5-1;
表ex5-5-1 窗體中的主要控件屬性
控件 | name屬性 | 功能 | 其它屬性 |
textbox控件 | textbox1 | 顯示信息 | scrollbars=vertical; multiline=true |
button控件 | button1 | 觸發添加信息事件 |
|
button2 | 觸發結束添加事件 |
3) 主要事件代碼。
……
int i = 1;
bool add = true;
……private void button1_click(object sender, eventargs e)
{
if(add) textbox1.text += "第" + i + "次單擊按鈕/r/n";
i++;
}
private void button2_click(object sender, eventargs e)
{
add = false;
}
6. 編寫一段程序,向listbox控件listbox1中,自動添加10個數,每個數占一項。
【解答】
主要代碼如下:
public partial class form1 : form
{
int m = 1;
……
private void button1_click(object sender, eventargs e)
{
for (int i = m ; i < m+10; i++)
{
listbox1.items.add(i);
}
m = m + 10;
}
}
7. 參照windows系統“附件”中的“計算器”,自行編寫一個簡易的計算器。要求:可以實現由0~4構成的整數的加減運算。
【解答】
1) 窗體界面如圖ex5-5-2所示;

2) 將inputnumber事件作為button0、button1、button2、button3、button4的click事件。
完整代碼如下:
using system;
using system.collections.generic;
using system.componentmodel;
using system.data;
using system.drawing;
using system.text;
using system.windows.forms;
namespace exer2
{
public partial class formcalculator : form
{
enum calculatetype { none, add, sub };
calculatetype mycal = calculatetype.none;
int x, y;
bool isy = false;
public formcalculator()
{
initializecomponent();
textbox.textalign = horizontalalignment.right;
}
private void inputnumber(object sender, eventargs e)
{
button num = (button)sender;
if (isy)
{
textbox.clear();
isy = false;
}
textbox.text += num.text;
}
private void buttonequal_click(object sender, eventargs e)
{
y = convert.toint32(textbox.text);
if (mycal == calculatetype.add)
{
textbox.text = convert.tostring(x + y);
mycal = calculatetype.none;
}
if (mycal == calculatetype.sub)
{
textbox.text = convert.tostring(x - y);
mycal = calculatetype.none;
}
isy = true;
}
private void addbutton_click(object sender, eventargs e)
{
mycal = calculatetype.add;
x = convert.toint32(textbox.text);
isy = true;
}
private void buttonsub_click(object sender, eventargs e)
{
mycal = calculatetype.sub;
x = convert.toint32(textbox.text);
isy = true;
}
private void buttonclear_click(object sender, eventargs e)
{
textbox.text = "";
mycal = calculatetype.none;
isy = false;
}
}
}
8. 試利用treeview、listview等控件實現一個類似“資源管理器”的文檔管理程序,用于查看c:/documents and settings目錄下的文件。
【解答】
1) 新建一個名為windowscontrolsexercise的項目,在【解決方案資源管理器】中重命名文件form1.cs為explorer.cs,并設置form1窗體的text屬性為“資源管理器”。
2) 向窗體中添加一個splitcontainer控件、一個imagelist控件、一個treeview控件、一個listview控件,頁面布局及各控件屬性如圖ex5-5-3所示。

3) 在【解決方案資源管理器】中,將imagelist1控件中的兩個圖標文件添加到應用程序目錄中,分別命名為folder.ico和doc.ico。
4) 在explorer.cs代碼文件中添加命名空間:using system.io,并添加構造函數代碼如下:
public explorer()
{
initializecomponent();
populatetreeview();
}
private void populatetreeview()
{
treenode rootnode;
directoryinfo info = new directoryinfo(@"c:/documents and settings");
if (info.exists)
{
rootnode = new treenode(info.name);
rootnode.tag = info;
getdirectories(info.getdirectories(), rootnode);
treeview1.nodes.add(rootnode);
}
}
private void getdirectories(directoryinfo[] subdirs, treenode nodetoaddto)
{
treenode anode;
directoryinfo[] subsubdirs;
foreach (directoryinfo subdir in subdirs)
{
anode = new treenode(subdir.name, 0, 0);
anode.tag = subdir;
anode.imagekey = "folder";
subsubdirs = subdir.getdirectories();
if (subsubdirs.length != 0)
{
getdirectories(subsubdirs, anode);
}
nodetoaddto.nodes.add(anode);
}
}
5) 添加treeview1的nodemouseclick事件,使單擊treeview1中某個節點時,用該節點的內容來填充listview1。
private void treeview1_nodemouseclick(object sender, treenodemouseclickeventargs e)
{
treenode newselected = e.node;
listview1.items.clear();
directoryinfo nodedirinfo = (directoryinfo)newselected.tag;
listviewitem.listviewsubitem[] subitems;
listviewitem item = null;
foreach (directoryinfo dir in nodedirinfo.getdirectories())
{
item = new listviewitem(dir.name, 0);
subitems = new listviewitem.listviewsubitem[]
{new listviewitem.listviewsubitem(item, "directory"),
new listviewitem.listviewsubitem(item,
dir.lastaccesstime.toshortdatestring())};
item.subitems.addrange(subitems);
listview1.items.add(item);
}
foreach (fileinfo file in nodedirinfo.getfiles())
{
item = new listviewitem(file.name, 1);
subitems = new listviewitem.listviewsubitem[]
{ new listviewitem.listviewsubitem(item, "file"),
new listviewitem.listviewsubitem(item,
file.lastaccesstime.toshortdatestring())};
item.subitems.addrange(subitems);
listview1.items.add(item);
}
listview1.autoresizecolumns(columnheaderautoresizestyle.headersize);
}
6) 按鍵編譯并執行。