.NET 程式設計入門 (使用 C#)
講師︰唐士軒
CSIE NTU
.NET 專案範本
檔案介紹
記錄方案的編輯狀態 cs_form.suo
專案目前編輯狀態 cs_form.csproj.user
描述組件的資訊 assemblyInfo.cs
儲存表單中使用的相關資料 Form1.resx
儲存表單及程式碼相關資訊 Form1.cs
利用專案所編譯出來的執行檔 cs_form.exe
儲存專案中使用到那些檔案資料等資訊 cs_form.csproj
儲存方案中使用到那些檔案資料等資訊 cs_form.sln
說明 檔案
方案總管
z 我們可以利用 [檢視] 中的 [方案總管] 來開啟方 案總管視窗
功能說明 圖示
顯示所有檔案 重新整理
切換到表單編輯視窗 切換到程式編輯視窗
屬性視窗
z 在程式設計階段,可以透過 [檢視] 中的 [屬性 視窗] 來設定修改表單上各控制項的屬性值
功能說明 圖示
顯示屬性視窗
依屬性名稱排序顯示 依屬性類型分類顯示
物件下拉選單
控制項
z開啟 [檢視] 中的 [工具箱] 會列出常用控 制項
z要在表單中加入控制項的方式有二種
z點選控制項後拖曳至表單上 z連續點選控制項二下
z重疊顯示二個控制項
z可利用右鍵中的提到最上層
或移到最下層來調整控制項
表單及控制項常用屬性
z 外觀
z Text–控制項的標題文字 z BackColor–背景色
z BackgroundImage–背景圖 z Font–字型設定
z ForeColor–前景色
z 行為
z Enable–設定該控制項是否有作用 z Visible–是否顯示該控制項
z 配置
事件
z在視窗程式設計中,程式的執行流程是 以使用者觸發的事件順序來決定
z表單及控制項個別提供了許多不同的事 件,我們可以在不同的事件中撰寫不同 的程式
z當使用者觸發事件後,程式的流程會立 即跳至該事件內的程式區塊中執行
z在事件視窗中,點選事件名稱二下,即
表單常用事件
zLoad
z當表單被載入開啟時,會執行此事件內的程 式區段一次
zClick
z在表單上按下滑鼠左鍵,會執行此事件內的 程式區段一次
zResize
z調整表單大小時,會執行此事件內的程式區
段一次
Label 控制項
zLabel 控制項主要是用來顯示文字 z常用屬性
zText–設定要顯示的文字
zTextAlign–設定文字顯示位置 zVisible–是否顯示控制項
z常用事件
zClick–按一下時發生
zMouseEnter–滑鼠經過
實例探討 sample6-a1
z程式功能
z猜謎語
z程式內容
private void answerLB_Click(object sender, System.EventArgs e)
{
answerLB.Text = "灰熊厲害";
}
課堂練習 sample6-b1
z程式功能
z猜謎語
z當滑鼠移至題目上時,題目的字改成 "看解 答",當滑鼠移開後恢復成原本題目的文字 z當使用者點選 "看解答" 時,原本題目的文
字變成解答
z基本概念
z利用 Click、MouseEnter 及 MouseLeave 事件
Button 控制項
zButton 控制項提供按鈕功能 z常用屬性
zText–設定要顯示的文字
zTextAlign–設定文字顯示位置 zVisible–是否顯示控制項
z常用事件
zClick–按一下時發生
zMouseEnter–滑鼠經過
實例探討 sample6-a2
z程式功能
z設計結束視窗按鈕
z設定表單上的 CancelButton
z程式內容
private void closeBTN_Click(object sender, System.EventArgs e)
{
Application.Exit();
TextBox 控制項
zTextBox 控制項用以讓使用者輸入資料 z常用屬性
zText–設定取得控制項中的文字 zTextAlign–設定文字顯示位置
zPasswordChar–輸入的資料以別的字元顯示 zReadOnly–文字是否允許修改
zMaxLength–輸入文字最大寬度
zMultiLine–允許多行輸入
課堂練習 sample6-b2
z程式功能
z登入系統
z輸入帳號為 alice ,密碼為 bob 時,顯示登 入成功,否則顯示資料錯誤
z另設清除按鍵,將輸入方塊的資料清除
z基本概念
z在 Click 事件中判斷使用者輸入的資料是否
正確
Timer 控制項
zTimer 控制項供計時及週期事件使用 z常用屬性
zEnable–是否啟動 Timer
zInterval–Timer 事件發生週期 (千分之一秒)
實例探討 sample6-a3 (1)
z 程式功能
z 倒數計時
z 程式內容
private void startBTN_Click(object sender, System.EventArgs e)
{
timer1.Enabled = true;
countLB.Text = countTB.Text;
countTB.Enabled = false;
startBTN.Enabled = false;
實例探討 sample6-a3 (2)
z程式內容
private void timer1_Tick(object sender, System.EventArgs e)
{
countLB.Text = (int.Parse(countLB.Text) - 1) .ToString();
if(int.Parse(countLB.Text) ==0) timer1.Enabled = false;
}
課堂練習 sample6-b3
z程式功能
z閃爍提示文字
z點選文字開始閃爍 z再點選停止
z基本概念
z可利用定時更改 Label 控制項的 Visible 屬 性達到閃爍效果
z也可定時更改 Label 控制項的文字來達成
PictureBox 控制項
zPictureBox 控制項供計時及週期事件使用 z常用屬性
zImage–設定顯示圖片
zSizeMode–設定載入圖片擺放方式
zNormal︰圖片放在控制項的左上角
zStretchImage︰圖片隨控制項大小伸縮
zAutoImage︰控制項隨圖片大小伸縮
zCenterImage︰圖片放在控制項正中央
課堂練習 sample6-b4
z程式功能
z紅綠燈
z可設定紅燈綠燈及黃燈時間長度
z基本概念
z利用 Timer 來決定更換圖片時間 z利用 MSDN 查詢程式執行中更換
PictureBox 圖片的方式
z可能需要一個可供所有方法存取的欄位變數
MessageBox 類別
zMessageBox 類別提供錯誤或警告訊息等 的對話方塊,以提醒使用者注意
zShow 靜態方法
zShow (訊息文字, 標題文字, 顯示按鈕, 圖示);
zShow (string, string, MessageBoxButtons,
MessageBoxIcon)
MessageBox 類別–顯示按鈕
說明 顯示按鈕列舉常數
重試、取消 MessageBoxButtons.RetryCancel
MessageBoxButtons.YesNo 是、否
是、否、取消 MessageBoxButtons.YesNoCancel
異常終止 重試、略過 MessageBoxButtons.AbortRetryIgnore
確定、取消 MessageBoxButtons.OKCancel
MessageBoxButtons.OK 確定
MessageBox 類別–圖示
MessageBoxIcon.Question MessageBoxIcon.Stop MessageBoxIcon.Hand
圖示 圖示列舉常數
MessageBoxIcon.Error MessageBoxIcon.Warning MessageBoxIcon.Exclamation
MessageBoxIcon.Information MessageBoxIcon.Asterisk
MessageBox 類別–回傳值
z 呼叫 MessageBox.Show 方法時,當使用者按 下訊息方塊中其中一個按鈕時,會回傳一個 DialogResult 列舉型別的回傳值
5 4 3 2 1
回傳值 按鈕
列舉型別
DialogResult.Ignore 略過
重試 DialogResult.Retry
DialogResult.Abort 異常終止 DialogResult.Cancel 取消
確定 DialogResult.OK
實例探討 sample6-a4 (1)
z 程式功能
z 密碼設定 (限四碼)
z 程式內容
private void okBTN_Click(object sender, System.EventArgs e) {
if(pwTB.Text.Length != 4)
MessageBox.Show("密碼設定限四位數!!", "設定錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
else {
MessageBox.Show("密碼設定成功!!", "設定完成",
MessageBoxButtons.OK, MessageBoxIcon.Information);
實例探討 sample6-a4 (2)
z 程式內容
private void exitBTN_Click(object sender, System.EventArgs e)
{
DialogResult result;
result = MessageBox.Show("確定離開!?", "離開", MessageBoxButtons.OKCancel,
MessageBoxIcon.Question);
if(result == DialogResult.OK) Application.Exit();
else
RadioButton 控制項
z RadioButton 控制項提供單選選項按鈕的功能 z 同一個表單中具有多組單選選項時,可利用
GroupBox 或 Panel 來區隔 z 常用屬性
z CheckAlign–設定選項按鈕顯示位置 z Checked–按鈕是否選取
z Text–顯示文字
z 常用事件
z CheckedChanged–Checked 屬性改變時發生
實例探討 sample6-a5 (1)
z程式功能
z資料核對
z利用 GroupBox 將 RadioButton 區分為二組
z程式內容
private void exitBTN_Click(object sender, System.EventArgs e)
{
Application.Exit();
實例探討 sample6-a5 (2)
z 程式內容
private void sendBTN_Click(object sender, System.EventArgs e)
{
string checkStr = "您是" + (sex1RB.Checked? "男生":
"女生") + ",您的學歷為";
foreach(RadioButton rb in educationGB.Controls) if(rb.Checked) checkStr += rb.Text;
CheckBox 控制項
z CheckBox 控制項提供複選核取方塊的功能 z 常用屬性
z CheckAlign–設定核取方塊顯示位置 z Checked–核取方塊是否選取
z Text–顯示文字
z ThreeState–設定為雙態或三態 z CheckState–取得目前勾選狀況
z 常用事件
z CheckedChanged–Checked 屬性改變時發生
實例探討 sample6-a6 (1)
z 程式功能
z 電腦採購
z 勾選需要配備立即更新總價
z 程式內容
private void monitorCB_CheckedChanged(object sender, System.EventArgs e)
{
int cost = monitorCB.Checked? 12000: -12000;
totalLB.Text = (int.Parse(totalLB.Text) + cost).ToString();
實例探討 sample6-a6 (2)
z 程式內容
private void boxCB_CheckedChanged(object sender, System.EventArgs e)
{
int cost = boxCB.Checked? 15000: -15000;
totalLB.Text = (int.Parse(totalLB.Text) + cost).ToString();
}
private void mouseCB_CheckedChanged(object sender, System.EventArgs e)
{
int cost = mouseCB.Checked? 500: -500;
實例探討 sample6-a6 (3)
z 程式內容
private void
keyboardCB_CheckedChanged(object sender, System.EventArgs e)
{
int cost = keyboardCB.Checked? 500: -500;
totalLB.Text = (int.Parse(totalLB.Text) +
cost).ToString();
課堂練習 sample6-b5
z程式功能
z電腦採購
zCPU 、 RAM 及週邊各有三種類可挑選
zCPU 及 RAM 為必備元件,若沒採購跳出錯 誤訊息視窗
z計算全部費用
z基本概念
z可利用迴圈讀取 GroupBox 中的元件簡化程
式碼
ListBox 控制項 (1)
zListBox 控制項提供文字項目清單供使用者 選擇
z常用屬性
zItems–元素內容 (ListBox.ObjectCollection 類別) zMultiColumn–設定多欄顯示
zColumnWidth–多欄顯示時每一個欄位寬度 zSelectionMode–設定清單可選取數目
zNone–不能選取
zOne–單選
ListBox 控制項 (2)
z常用屬性
zSelectedItem–取得被選取項目
zSelectedItems–取得被選取項目集合 zSelectedIndex–取得選取項目索引
zSelectedIndices–取得所有選取項目索引
z常用事件
zSelectedIndexChange–清單中選取項目改變
時發生
相關類別
zListBox.ObjectCollection 類別 z常用屬性
zCount–計算清單項目個數
z常用方法
zAdd –新增項目至清單
zRemove–刪除清單中某項目 zClear–清除全部項目
z用法
實例探討 sample6-a7 (1)
z 程式功能
z 設定啟用功能
z 程式內容
private void Form1_Load(object sender, System.EventArgs e)
{
string[] funcStr = {"檔案","編輯","檢視","專案","建置
","偵錯","工具","視窗","說明"};
foreach(string str in funcStr) allLB.Items.Add(str);
實例探討 sample6-a7 (2)
z 程式內容
private void addBTN_Click(object sender, System.EventArgs e) {
if(allLB.SelectedItem == null)
MessageBox.Show("尚未選取欲新增功能!!", "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Warning);
else {
enableLB.Items.Add(allLB.SelectedItem);
allLB.Items.Remove(allLB.SelectedItem);
} }
實例探討 sample6-a7 (3)
z 程式內容
private void removeBTN_Click(object sender, System.EventArgs e) {
if(enableLB.SelectedItem == null)
MessageBox.Show("尚未選取欲刪除功能!!", "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Warning);
else {
allLB.Items.Add(enableLB.SelectedItem);
enableLB.Items.Remove(enableLB.SelectedItem);
} }
ComboBox 控制項
zComboBox 控制項提供下拉式選單功能,
為 ListBox 控制項的延伸 z常用屬性
zText–取得設定文字
zMaxLength–使用者可輸入最大長度
zMaxDropDownItems–下拉部份一次顯示最 大項目個數
zDropDownStyle
zDropDown–可編輯,箭頭按鈕顯示清單
實例探討 sample6-a8 (1)
z程式功能
z地址輸入
z程式內容
private void addressTB_Enter(object sender, System.EventArgs e)
{
if(addressTB.Text == "輸入地址")
addressTB.Text = "";
實例探討 sample6-a8 (2)
z 程式內容
private void area1CB_SelectedIndexChanged(object sender, System.EventArgs e)
{
area2CB.Items.Clear();
if(area1CB.SelectedIndex == 0) {
area2CB.Items.Add("信義區");
area2CB.Items.Add("大安區");
area2CB.Text = area2CB.Items[0].ToString();
} else {
area2CB.Items.Add("汐止市");
課堂練習 sample6-b6
z 程式功能
z 書籍分類清單
z 基本概念
z 利用 ComboBox 及 ListBox 完成
台式料理 日式料理
韓式料理 食譜
資料庫程式 設計
十天學會 JAVA C# 程式設
計入門 電腦
倚天屠龍記 神鵰俠侶
射鵰英雄傳 小說
TreeView 控制項
zTreeView 控制項提供樹狀結構檢視功能 z常用屬性
zNodes–節點內容
zSelectedNode–選取節點
zCheckBoxes–顯示核取方塊
zPathSeperator–傳回路徑的字串分隔字元
z常用事件
相關類別
zTreeNodeCollection 類別
zCount 屬性–取得節點數
zAdd 方法–增加節點至該點子節點中
zRemove 方法–刪除節點 (傳入 TreeNode)
zTreeNode 類別
zText–節點顯示文字
zRemove 方法–刪除節點
zFullPath–取得從根樹狀節點通往目前樹狀
實例探討 sample6-a9 (1)
z 程式功能
z 簡易資料夾檢索
z 程式內容
private void Form1_Load(object sender, System.EventArgs e)
{
string[] drives = Directory.GetLogicalDrives();
foreach(string drive in drives) diskCB.Items.Add(drive);
updateTreeView(diskCB.Text);
實例探討 sample6-a9 (2)
z 程式內容
private void diskCB_SelectedIndexChanged(object sender, System.EventArgs e)
{
updateTreeView(diskCB.Text);
}
private void updateTreeView(string disk) {
try {
dirTV.Nodes.Clear();
實例探討 sample6-a9 (3)
z 程式內容
int i=0;
foreach(string dir in dirs)
{
dirTV.Nodes.Add(dir);
i++;
try
{
string[] subDirs = Directory.GetDirectories(dir);
foreach(string subDir in subDirs)
dirTV.Nodes[i-1].Nodes.Add(subDir);
}
catch {}
課堂練習 sample6-b7
z程式功能
z班級資料表 z可新增班級
z重複新增不予動作
z基本概念
z利用 TreeView 顯示班級資訊
ListView 控制項
zListView 控制項提供項目清單檢視功能 z常用屬性
zColumns–設定包含欄位 zItems–清單項目內容
(ListView.ListViewItemCollection 類別) zView–清單檢視方式
zCheckBoxes–顯示核取方塊
zGridLines–顯示格線
相關類別 (1)
zListView.ListViewItemCollection 類別
zCount 屬性–取得項目個數 zAdd 方法–新增項目
zRemove 方法–移除指定項目 zClear 方法–清除所有項目
zListViewItem 類別
zSubItems 屬性–子項目
(ListViewItem.ListViewSubItemCollection 類別)
相關類別 (2)
zListViewItem.ListViewSubItemCollection 類別
zCount 屬性–取得子項目個數 zAdd 方法–新增子項目
zRemove 方法–移除指定子項目 zClear 方法–清除所有子項目
zListViewItem.ListViewSubItem 類別
zText 屬性–設定取得子項目內容
實例探討 sample6-a10 (1)
z 程式功能
z 學生名單
z 程式內容
private void clearBTN_Click(object sender, System.EventArgs e)
{
idTB.Text = "";
nameTB.Text = "";
studentLV.Items.Clear();
實例探討 sample6-a10 (2)
z 程式內容
private void addBTN_Click(object sender, System.EventArgs e)
{
if(idTB.Text != "" && nameTB.Text != "") {
ListViewItem item = new ListViewItem();
item.SubItems.Add(idTB.Text);
item.SubItems.Add(nameTB.Text);
studentLV.Items.Add(item);
}
課堂練習 sample6-b8
z程式功能
z成績表
z可新增科目成績資料 z計算總平均
z基本概念
z利用 ListView 來完成
執行緒
z我們可以把執行緒想像為一段程式碼區段 z一個應用程式至少會在一個以上的執行緒
中執行
z.NET 內建提供多執行緒支援,可藉由執 行緒類別成員所提供的功能來控制執行緒 的行為
zThread 類別提供執行緒支援,可引用
Thread 類別 (1)
z建構式
zpublic Thread(ThreadStart start );
z常用屬性
zName–取得或設定執行緒名稱
zIsAlive–取得目前執行緒執行狀況
z常用方法
zStart–執行該執行緒
zSuspend–使執行緒暫停
Thread 類別 (2)
z靜態方法
zSleep–暫停執行緒一段時間
z靜態屬性
zCurrentThread–取得目前執行緒
z用法
zThreadStart myThreadStart =
new ThreadStart(方法成員名稱);
zThread myThread =
實例探討 sample6-a11 (1)
z 程式功能
z 遊戲半成品,Thread 類別測試
z 程式內容
class box {
public static bool stopFlag = false;
private System.Windows.Forms.Label myLB;
public box(System.Windows.Forms.Label LB) {
myLB = LB;
實例探討 sample6-a11 (2)
z 程式內容
public void action() {
Random rnd = new Random();
do {
myLB.Top += rnd.Next(0,2) == 0? 50: -50;
if(myLB.Top <= 0) myLB.Top += 100;
else if(myLB.Top >= 400) myLB.Top -= 100;
Thread.Sleep(500);
}while(!stopFlag);
實例探討 sample6-a11 (3)
z 程式內容
private void startBTN_Click(object sender, System.EventArgs e) {
startBTN.Enabled = false;
box myBox1 = new box(box1LB);
box myBox2 = new box(box2LB);
Thread box1Thread =
new Thread(new ThreadStart(myBox1.action));
Thread box2Thread =
new Thread(new ThreadStart(myBox2.action));
實例探討 sample6-a11 (4)
z 程式內容
box1Thread.Start();
Thread.Sleep(200);
box2Thread.Start();
}
private void endBTN_Click(object sender, System.EventArgs e)
{
box.stopFlag = true;
Application.Exit();
實例探討 sample6-a12 (1)
z 程式功能
z 利用單一執行緒執行高運算量計算
z 程式內容
private void computeBTN_Click(object sender, System.EventArgs e)
{
computing();
}
private void computing() {
try {
實例探討 sample6-a12 (2)
z 程式內容
catch {
resultLB.Text = "--";
} }
private int garbage(int num) {
if(num <= 4) return num;
else return garbage(num-1)-garbage(num-2) +garbage(num-3)-garbage(num-4);