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) 按