Download presentation
Presentation is loading. Please wait.
1
第九章 日期、捲軸 上下按鈕控制項
2
9-1 MonthCalendar 月曆控制項 可快速建立月曆介面,用來查詢日期和選取 日期範圍。
6
二. 如何在月曆控制項中新增日期
7
三. 月曆控制項常用方法
11
四. 月曆控制項的常用事件 DateChanged 事件 是MonthCalendar控制項的預設事件 當切換或選擇日期時會觸動該事件。
DateSelected事件 當選擇日期時會觸動 此事件。 如點選一個日期: 先觸動 DateChanged 事件。 再觸動 DateSelected 事件。
13
輸出結果
14
建立輸出入介面
15
private void Form1_Load(object sender, EventArgs e)
{ mcdDate.MinDate = DateTime.Today; // 設可選擇最小日期為今天 mcdDate.MaxSelectionCount = 7; // 設最多可以選擇7天 mcdDate.SelectionStart = DateTime.Today; // 預設選擇日期為今天 } private void mcdDate_DateChanged(object sender, DateRangeEventArgs e) { //根據選擇起始日期的月份來設定背景色 switch (mcdDate.SelectionStart.Month) //使用Month屬性來取得所在的月份 case 3: //3~5月背景設為淺綠色 case 4: case 5: this.BackColor = Color.LightGreen; break; case 6: //6~8月背景設為淺藍色 case 7: case 8: this.BackColor = Color.LightBlue; case 9: //9~11月背景設為橘色 case 10: case 11: this.BackColor = Color.Orange; default: //其餘月份設為白色 this.BackColor = Color.White; private void mcdDate_DateSelected(object sender, DateRangeEventArgs e) { DateTime d_start = mcdDate.SelectionStart; // d_start記錄選擇的起始日期 DateTime d_end = mcdDate.SelectionEnd; // d_end記錄選擇的結束日期 TimeSpan ts = d_end - d_start; // ts為間隔時間 int days = ts.Days + 1; // 將間隔時間轉成天數 int rest;//紀錄租金 switch (days) //根據天數來設定租金 case 1: //1天設定租金為10元 rest = 10; break; case 2: //2~3天設定租金為8元 case 3: rest = 8; default: //其餘天數設定租金為6元 rest = 6; } lblMoney.Text = days.ToString() + " 天的租金為 " + (days * rest).ToString() + "元";
16
9-2 DateTimePicker日期時間挑選控制項
19
二. 日期時間挑選控制項的常用事件 ValueChanged 事件 是DataTimePicker 控制項的預設事件
21
設計輸出入介面
22
private void Form1_Load(object sender, EventArgs e)
{ dtpTime.Format = DateTimePickerFormat.Custom; dtpTime.CustomFormat = "yyyy/M/d/HH:mm"; dtpTime.ShowUpDown = true; dtpTime.MaxDate = DateTime.Now; lblMsg.Text = "請輸入入場時間後按計算鈕"; } private void btnOK_Click(object sender, EventArgs e) TimeSpan t_span = DateTime.Now - dtpTime.Value; double t_min = t_span.TotalMinutes; //起訖時間的總分鐘數 double hours = t_span.TotalHours; //起訖時間的總小時數 int mins = t_span.Minutes; //分鐘數 int total = 0; //設停車費為0元 if (t_min > 15) total = (int)hours * 20; //每小時20元 if (mins >= 1 && mins <= 30) //1~30分收費10元 total += 10; else if (mins > 30) //31~59分收費20元 total += 20; lblMsg.Text = "共停 " + (int)hours + " 小時 " + mins + " 分 " + "停車費" + total + "元";
23
9-3 ScrollBar 捲軸控制項 有水平捲軸項和垂直捲軸控制項兩種。 捲軸控制項提供直覺式輸入一定範圍整數值介面
拖曳捲動鈕可改變數值避免輸入錯誤或超出範圍。
24
一. 捲軸控制項的常用屬性
25
二. 捲軸控制項的常用事件 Scroll 事件 預設事件 當滑鼠或鍵盤移動捲動鈕時會觸動此事件。 ValueChanged 事件
ValueChanged 事件執行後立刻觸動 Scroll 事件。
27
設計輸出入介面
28
int ok, miss; //紀錄接到和失誤的次數
private void Form1_Load(object sender, EventArgs e) { hsbMove.Maximum = 400; hsbMove.Minimum = 40;//設捲軸的最大和最小值 hsbMove.Value = 220; //預設捲軸的值 picEgg.Image = Image.FromFile("egg.gif"); //載入雞蛋圖檔 picBowl.Image = Image.FromFile("bowl.gif"); //載入碗圖檔 lblMsg.Text = "按開始鈕開始遊戲!"; } private void hsbMove_ValueChanged(object sender, EventArgs e) picBowl.Left = hsbMove.Value - 16; //設碗圖片的位置 private void btnStart_Click(object sender, EventArgs e) tmrFall.Start();//啟動計時器 ok = 0; miss = 0;//預設接到和失誤的次數都為0 btnStart.Enabled = false;//開始鈕不能使用 private void tmrFall_Tick(object sender, EventArgs e) { picEgg.Top += 10; //雞蛋圖片下移10點 if (picEgg.Top + 12 >= picBowl.Top) //若雞蛋圖片超過碗圖片的位置 { //如果雞蛋圖片在碗圖片的位置當中 if (picEgg.Left >= picBowl.Left && picEgg.Left + 16 <= picBowl.Left + 40) { ok++; } //接到次數加1 else { miss++; } //失誤次數加1 lblMsg.Text = "接到:" + ok + "次 失誤:" + miss + "次"; Random ran = new Random(); picEgg.Location = new Point(ran.Next(60, 400), 5);//設蛋的亂數位置 if (ok + miss == 10) //如果接到和失誤的次數總合為10 btnStart.Enabled = true; //開始鈕可以使用 tmrFall.Stop(); //關閉計時器 }
29
9-4 TrackBar 滑動軸控制項
30
一. 滑動軸控制項的常用屬性
31
二. 滑動軸控制項的常用事件 Scroll事件 - 是預設事件 - 當滑鼠在該控制項上拖曳滑動鈕時 會觸動該事件。 - 用程式碼改變 Value 屬性值, 只觸動ValueChanged事件。 2. ValueChanged事件 - 當控制項的 Value 屬性值改變觸動此事件。 - ValueChanged 事件執 行後,會立刻觸動 Scroll事件。
33
設計輸出入介面
34
private void Form1_Load(object sender, EventArgs e)
{ picBug.Image = Image.FromFile("p2.jpg");//載入圖檔 picBug.SizeMode = PictureBoxSizeMode.StretchImage;//圖片隨控制項縮放 tkbW.Value = 100; //設tkbW的初值 tkbH.Value = 110; //設tkbH的初值 } private void tkbW_ValueChanged(object sender, EventArgs e) picBug.Width = tkbW.Value; //圖片寬度等於tkbW的值 lblWH.Text = "W:" + tkbW.Value + " H:" + (210 - tkbH.Value); private void tkbH_ValueChanged(object sender, EventArgs e) picBug.Height = tkbH.Value; //圖片高度等於210-tkbH的值
35
9-5 NumericUpDown 數字上下鈕控制項
用來選擇指定範圍的數值。 優點是避免輸入超過範圍的資料。
36
一. 數字上下鈕控制項常用屬性
37
二. 數字上下鈕控制項常用方法
38
三. 數字上下鈕控制項常用事件 預設事件是 ValueChanged 事件 當控制項的 Value 屬性值改變時會觸動 此事件。
40
設計輸出入介面
41
int sec; //紀錄倒數的秒數 private void Form1_Load(object sender, EventArgs e) { nudMin.Minimum = 0;nudMin.Maximum = 10;//設定分鐘的範圍 nudMin.Value = 0; //預設分鐘為0 nudSec.Minimum = 0; nudSec.Maximum = 60;//設定秒數的範圍 nudSec.Value = 30; //預設秒數為30 lblSec.Text = ""; timer1.Interval = 1000;//每秒觸發一次 } private void btnStart_Click(object sender, EventArgs e) { //計算倒數秒數 sec = (int)nudMin.Value * 60 + (int)nudSec.Value; btnStart.Enabled = false;//開始鈕不能使用 lblSec.Text = sec.ToString();//顯示剩餘秒數 timer1.Start();//啟動計時器 private void timer1_Tick(object sender, EventArgs e) sec--; //減一秒 if (sec == 0) //若剩餘0秒 timer1.Stop();//關閉計時器 lblSec.Text = "時間到"; btnStart.Enabled = true;//開始鈕可以使用
42
9-6 DomainUpDown 範圍上下鈕控制項
使用上下按鈕來選擇指定文字清單的一個項目。 範圍上下鈕控制項類似清單控制項 只是使用上下鈕來選擇項目,可避免輸入不合法資料。 當 ReadOnly 屬性值設 true,可允許使用者輸入文字。
43
一. 範圍上下鈕控制項常用屬性
44
二. 範圍上下鈕控制項常用方法 此控制項 Items 屬性的方法和清單控制項相同 如:Add、AddRange、Remove 等。 三. 範圍上下鈕控制項常用事件 預設事件是 SelectedItemChanged 事件。 當控制項切換新項目時會觸動該事件, 可將相關程式碼寫在該事件函式中。
46
設計輸出入介面
47
private int num1, num2, ans;//題目1、題目2、答案
private void Form1_Load(object sender, EventArgs e) { lblTest.Text = ""; lblMsg.Text = "選擇運算元和位數後按出題鈕開始測驗!"; btnCheck.Enabled = false; //對答按鈕不能使用 dudOpt.Items.Add("加法"); dudOpt.Items.Add("減法"); dudOpt.SelectedIndex = 0; //預設為第一個項目-加法 dudNum.Items.Add("個位數"); dudNum.Items.Add("二位數"); dudNum.Items.Add("三位數"); dudNum.SelectedIndex = 0; //預設為第一個項目-個位數 } private void btnTest_Click(object sender, EventArgs e) Random ran = new Random(); //物件亂數ran switch (dudNum.SelectedIndex) case 0://選個位數時,產生1~9亂數 num1 = ran.Next(1, 9); num2 = ran.Next(1, 9); break; case 1://選二位數時,產生10~99亂數 num1 = ran.Next(10, 99); num2 = ran.Next(10, 99); case 2://選三位數時,產生100~999亂數 num1 = ran.Next(100, 999); num2 = ran.Next(100, 999); if (dudOpt.SelectedIndex == 0)//若選第一個項目-加法 { lblTest.Text = num1 + " + " + num2 + " =";//顯示題目 ans = num1 + num2; //計算答案 } else lblTest.Text = num1 + " - " + num2 + " ="; ans = num1 - num2; btnTest.Enabled = false; btnCheck.Enabled = true; txtAns.Clear(); //文字方塊清空 lblMsg.Text = "請輸入答案!"; private void btnCheck_Click(object sender, EventArgs e) int s_ans;//使用者輸入的答案 try { s_ans = int.Parse(txtAns.Text); }//取得使用者輸入的答案 catch { lblMsg.Text = "請輸入數值!"; return; } if (s_ans == ans) //若答案正確 { lblMsg.Text = "太棒了!答案正確!"; } { lblMsg.Text = "答錯了!答案是: " + ans; } btnTest.Enabled = true; btnCheck.Enabled = false;
48
本章結束 Take a Break …
49
課堂練習 設計一個彈珠檯
Similar presentations