บทที่ 3 ตอนที่ 1 คำสั่งเงื่อนไขและการตัดสินใจ(p บทที่ 3 ตอนที่ 1 คำสั่งเงื่อนไขและการตัดสินใจ(p.2-26) ตอนที่ 2 Standard Windows Forms Controls (27-74)
คำสั่งเงื่อนไขและการตัดสินใจ ในการทำงานของโปรแกรมทั่วๆไปจะมีการทำงาน3 ประเภทหลัก การทำงานเป็นลำดับ (sequence) ก่อนและหลัง การตัดสินใจ(decision) มีเงื่อนไขให้ตรวจสอบการทำงาน การทำงานที่ต้องทำซ้ำ ๆ หลายครั้งหรือการวนลูป(loop)
คำสั่งเงื่อนไขและการตัดสินใจ คำสั่งที่ใช้ในการตัดสินใจเลือก ถือเป็นคำสั่งควบคุมชนิดหนึ่ง ภาษาโปรแกรมโดยทั่วไปจะมี 2 คำสั่ง คือ if – statement case หรือ switch
คำสั่ง IF if เป็นการเปรียบเทียบเงื่อนไขว่าตรงตามที่เราต้องการหรือไม่ หากตรงก็จะทำตามคำสั่งที่กำหนด แต่หากไม่ตรงก็จะข้ามคำสั่งส่วนนั้นไป กรณี การเขียนเงื่อนไขเดียว และกระทำกรณีเป็นจริง รูปแบบคำสั่ง ตรวจสอบเงื่อนไข ถ้าเป็นจริงจะทำงานตาม statement if ( condition ) { statement (s) }
ตัวอย่าง การเขียนเงื่อนไขเดียว if (x==y) { Console.Write("x equals to y"); } if ((x>0)&& (y<>0)) Z=x/y;
คำสั่ง IF หากหลัง if มีเพียง statement เดียวไม่จำเป็นต้องเขียน {} ครอบคำสั่งก็ได้เช่น if (x<0) str strText = "It’s Negative“; if (x>=0) str strText = "It’s Positive” ;
if-else statement if (expression ที่ทดสอบเงื่อนไข) { // ชุดคำสั่งเมื่อเงื่อนไขเป็นจริง } else // ชุดคำสั่งเมื่อเงื่อนไขเป็นเท็จ
การใช้ if-else แบบซ้อนกัน if (expression ที่ทดสอบเงื่อนไขที่ 1) { If (expression ที่ทดสอบเงื่อนไขที่ 2) (ชุดคำสั่งเมื่อเงื่อนไขที่ 2 เป็นจริง) } else (ชุดคำสั่งเมื่อเงื่อนไขที่ 2 เป็นเท็จ) (expression ที่ทดสอบเงื่อนไขที่ 1)
else if & Nested if statement if (condition1) { … } else if (condition2) { else { ตัวอย่าง char Result; if (Score > 80) Result = ‘A’; else if (Score > 50) Result = ‘B’; else Result = ‘F’;
else if & Nested if statement if (condition1) { … if (condition2) { if (condition3) { } x=10; y=20 if (x>5) { if (y>30) z=x*y; } else z=x+y;
โปรแกรมสำหรับคำนวณเกรด if (score >= 90) { grade = 'A'; } else if (score >= 80) grade = 'B'; else if (score >= 70) grade = 'C'; else if (score >= 60) grade = 'D'; else grade = 'F';
คำสั่ง switch..case ใช้ในการตัดสินใจเลือกมากกว่า 2 ทางเลือก จะทำการตรวจสอบเงื่อนไขในการเลือกก่อนว่าจะตรงกับตัวเลือกใด แล้วจึงทำงานตามคำสั่งที่ต่อท้ายตัวเลือกนั้น
คำสั่ง switch..case switch (variable) statement1; // ทำงานตามเงื่อนไขแรก case ค่าที่2 ของตัวแปร: // เงื่อนไขที่สอง statement2; // ทำงานตามเงื่อนไขที่สอง … case สุดท้าย: // เงื่อนไขที่สอง statement; // ทำงานตามเงื่อนไขสุดท้าย default : statementN; // เมื่อไม่ตรงกับเงื่อนไขใดๆ เลย }
ภาพแสดงลักษณะการตรวจสอบเงื่อนไข ของ switch-case
switch statement switch (expression) { case value1 : // เงื่อนไขแรก string str, color; Console.Write("Enter day of week:"); str = Console.ReadLine(); switch (str) { case "Sunday" : color = "red"; break; case “monday" : case "Monday" : color="yellow"; ... default : color="invalid"; } //แสดงผลบน lblResult string str, color; Console.Write("Enter day of week:"); str = Console.ReadLine(); switch (str) { case "Sunday" : color = "red"; break; case "Monday" : color="yellow"; ... default : color="invalid"; } Console.WriteLine("color of " + str.ToUpper() + " is " + color.ToUpper()); Console.Read (); switch (expression) { case value1 : // เงื่อนไขแรก statement1; // คำสั่ง break; case value2 : statement2; case valueN : statementN; default : statement; } expression: ตัวเลข or string
switch statement class DateDemo { public static void Main () char d; Console.Write(“ Input number date 1 – 7 : “); d = (char) Console.Read(); Console.Write(“ Input value : “ + d+” = Date of week = “); Switch (d) { case ‘1’ : Console.WriteLine(“Sunday.”); break; case ‘2’ : Console.WriteLine(“Monday.”); case ‘3’ : Console.WriteLine(“Tuesday.”); case ‘4’ : Console.WriteLine(“Wednesday.”); case ‘5’ : Console.WriteLine(“Thursday.”); case ‘6’ : Console.WriteLine(“Friday.”); case ‘7’ : Console.WriteLine(“Saturday.”); default : Console.WriteLine(“Invalid number”); } }}
ข้อควรระวังในการใช้ switch คือ ค่าของตัวแปรหรือนิพจน์ต้องเป็นเลขจำนวนเต็มหรือ char, byte เท่านั้น ไม่สามารถใช้แบบเป็นช่วง ชนิดข้อมูลของตัวแปร จะต้องเป็นประเภทเดียวกับค่าข้อมูลที่กำหนดหลัง case คำสั่ง switch จะประกอบด้วยคำสั่ง break หลังการทำงาน เพื่อควบคุมการทำงานของโปรแกรม ให้ทำงานเฉพาะกรณีผลการตรวจสอบเป็นจริง เพื่อลดเวลาในการประมวลผล แต่สามารถไม่ใส่คำสั่งนี้ได้ หากต้องการให้ทำงานต่อเนื่องทุก case
ในทางปฏิบัติจะเห็นว่าคำสั่ง switch และคำสั่ง if ให้ผลการทำงานเกือบเหมือนกัน ผู้ใช้สามารถเลือกเขียนด้วยชุดคำสั่งใดก็ได้ โดยทั่วไปคำสั่ง if จะครอบคลุมเงื่อนไขในการทดสอบได้มากกว่า เช่นสามารถทดสอบเป็นช่วงได้ สามารถทดสอบจำนวนจริงได้ แต่คำสั่ง switch จะช่วยให้โปรแกรมดูง่ายและสะดวกในการเขียนหรือแก้ไขโปรแกรม
Iteration Statement
for statement รูปแบบคำสั่ง เป็นการทำงานซ้ำตามจำนวนครั้งที่กำหนด โดยเริ่มจากค่าแรกไปจนถึงค่าสุดท้าย รูปแบบคำสั่ง for (counter = first value; counter condition; adjust counter value) { … } เช่น for (i=0;i<=10;i++) { … หมายถึง ให้วนลูปเริ่มตั้งแต่ค่า i=0 ไปเรื่อยๆ ตราบใดที่ค่า i ยังไม่เกิน 10 และให้เพิ่มค่า i ทีละ 1
Nest for…Loop สามารถใช้การวนลูปซ้อนกันกี่ชั้นก็ได้ for (…) { … }}}
ตัวอย่าง for statement (2) int num; string s; Console.Write ("Please Enter number : "); s=Console.ReadLine( ); num=int.Parse(s); for (int i=1; i<=num; i++){ for (int j=1;j<=i;j++){ Console.Write(j+" "); } // end for j Console.WriteLine(" "); } // end for i Console.Read( );
While ในการใช้งาน for Loop จำเป็นต้องระบุค่าเริ่มต้นและค่าสุดท้ายของลูป แต่ในกรณีที่ไม่ทราบค่าดังกล่าว แต่ทราบเงื่อนไขบางอย่าง สามารถใช้ลูป while แทนได้
while statement โครงสร้างของลูป while while (condition) { ….statement…. } ตัวอย่าง int Result = 0; int i = 0; while (i < 2) { i += 1; Result += i; } // end while Console.Write (Result + " " + i); // Result=____ i=____
do-while statement do { … } while (condition); while (condition) { … } ตัวอย่าง int Result = 0; int i = 0; do { i += 1; Result += i; } while (i < 2); Console.Write (Result + " " + i); // Result=____ i=____ while (condition) { … }
แบบฝึกหัด for & while statement (4) พี่มอสมีแฟนคลับ 2,857 คน โดยแต่ละปีจะมีแฟนคลับเพิ่มขึ้นปีละ 8% จงเขียนโปรแกรมคำนวณว่าจะใช้เวลากี่ปี พี่มอสจึงจะมีแฟนคลับมากกว่า 5,000 คน
องค์ประกอบของ IDE ใน c#.net
เมื่อเราเพิ่ม control(object)
สังเกตุฟังก์ชั่น
การสร้าง Event-Driven Programming แนวคิดของการเขียนโปรแกรม คือต้องสามารถตอบสนองต่อเหตุการณ์(Event-handling) ที่เกิดขึ้น เช่น การคลิก(Click) การดับเบิ้ลคลิก(DoubleClick) การกดแป้นพิมพ์(KeyDown, KeyPress, KeyUp) การเคลื่อนที่ของเมาส์(MouseMove, MouseUp, MouseDown) และเหตุการณ์อื่นๆ
รูปแบบของ Event-Driven Programming private void ObjName_Event(object sender, EventArgs e) { . . . } ObjName : ชื่อของวัตถุที่เราต้องการควบคุมเหตุการณ์ Event : เหตุการณ์ที่เกิดขึ้นกับวัตถุ sender: ตัวแปรที่ส่งไปแทนวัตถุที่เกิดเหตุการณ์ขึ้น e: ตัวแปรที่ส่งไปแทนเหตุที่เกิดขึ้นกับวัตถุ private void textBox1_TextChanged(object sender, EventArgs e) { }
Form อยู่ภายใต้ namespace : System.Windows.Forms.Form ใช้เป็น container สำหรับนำ controls อื่นๆ มาวาง เพื่อสร้าง GUI (Graphic User Interface)
Form Properties Text Font Opacity TopMost AcceptButton CancelButton AutoScroll Icon BackColor Enabled WindowState StartPosition Location Size MaximumSize MinimumSize
Form Events Activated and Deactivate Load Closing Closed Resize Move etc.
Form Event : Closing() private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) { if(MessageBox.Show(“Close Application?", "Closing Event", MessageBoxButtons.YesNo) == DialogResult.Yes) this.Dispose(); // ปิด form ตัวเอง // Application.Exit(); // จบการทำงานของ application } else // Cancel the Closing event from closing the form. e.Cancel = true;
การกำหนด Control Tab Order เลือก View menu -> Tab Order กำหนดลำดับ tab ให้กับ control ต่างๆ เลือก View menu -> Tab Order อีกครั้ง
Windows Forms Inheritance เลือก Add -> Add Inherited Form… กำหนดชื่อ form ใหม่ เลือก form ต้นแบบ การปรับปรุงที่ form ต้นแบบ ส่งผลถึง form ใหม่ที่ inherit มา
TextBox อยู่ภายใต้ namespace : System.Windows.Forms.TextBox สำหรับแสดงผลข้อความ หรือรับข้อความจากคีย์บอร์ด ขณะรันโปรแกรม
TextBox Properties Text TextAlign Visible Font BackColor ForeColor MultiLine ScrollBar BorderStyle Enable ReadOnly PasswordChar MaxLength Anchor AutoSize SelectionStart SelectionLength TextLength
TextBox Method Focus () กำหนด cursor ให้อยู่ที่ TextBox SelectAll () เลือกข้อความทั้งหมดภายใน TextBox Clear () ลบข้อความใน TextBox Hide () ซ่อน TextBox Show () แสดง TextBox
TextBox Events TextChanged KeyPress etc. เกิดขึ้นเมื่อผู้ใช้กดตัวอักษรบนคีย์บอร์ด etc.
การจัดการข้อความผ่าน TextBox textBox1.Text = "ข้อความ"; string str = textBox1.Text;
การ coding เพื่อกำหนด Properties void myMethod() { textBox1.Text = "123"; textBox1.BackColor = Color.Red; textBox1.Font=new Font("Tahoma",16,FontStyle.Bold); }
Label อยู่ภายใต้ namespace : System.Windows.Forms.Label สำหรับแสดงข้อความ คล้าย TextBox แต่ผู้ใช้ไม่สามารถแก้ไข หรือคัดลอกข้อความได้ (read only)
Button อยู่ภายใต้ namespace : System.Windows.Forms.Button เป็น control พื้นฐานที่มีใช้งาน สำหรับกดเพื่อทำงานบางอย่าง
Button Properties Text ข้อความที่แสดงบน Button Image รูปภาพที่แสดงบน Button Anchor กำหนดตำแหน่ง Button ตรึงบน Form
Button Events Click MouseHover เกิดขึ้นเมื่อ click ที่ปุ่ม เกิดขึ้นเมื่อนำเมาส์มาวางเหนือปุ่ม
แบบฝึกหัด (1) จงเขียนโปรแกรมสำหรับคำนวณเกรด โดยรับคะแนนจากผู้ใช้ โดยกำหนดว่า Grade Score A 81 – 100 B 70 – 80 C 60 – 69 D 50 – 59 F 0 – 49
แบบฝึกหัด (2) จงเขียนโปรแกรมสำหรับสร้างเครื่องคิดเลข ให้สามารถ +, -, *, / ได้ โดยรับค่าจากผู้ใช้ และแสดงค่าผ่าน textBox
GroupBox & Panel GroupBox Panel อยู่ภายใต้ namespace : System.Windows.Forms.GroupBox และ System.Windows.Forms.Panel ตามลำดับ สำหรับรวม control ต่างๆ เข้าไว้ด้วยกัน
RadioButton อยู่ภายใต้ namespace : System.Windows.Forms.RadioButton สำหรับเลือกรายการที่มีอยู่ โดยเลือกได้เพียง 1 รายการในแต่ละกลุ่มเท่านั้น (สามารถนำ GroupBox มาช่วย เพื่อทำให้มีหลายกลุ่ม)
RadioButton Properties Text ข้อความที่แสดงบน RadioButton Checked บ่งบอกสถานะ (true = คอนโทรลถูกเลือก) Appearance (Normal or Button) CheckAlign กำหนดตำแหน่งของ radiobutton
ตรวจสอบการเลือก RadioButton private void button1_Click(object sender, System.EventArgs e) { if (radioButton1.Checked == true) textBox1.Text=radioButton1.Text; else if (radioButton2.Checked == true) textBox1.Text=radioButton2.Text; }
RadioButton Event : CheckChanged private void radioButton1_CheckedChanged (object sender, System.EventArgs e) { if (radioButton1.Checked == true) textBox1.Text=radioButton1.Text; } private void radioButton2_CheckedChanged (object sender, System.EventArgs e) if (radioButton2.Checked == true) textBox1.Text=radioButton2.Text;
แบบฝึกหัด Radiobutton (1) จงเขียนโปรแกรมเพื่อคำนวณค่าผ่านประตู ตามเงื่อนไขดังตาราง
CheckBox อยู่ภายใต้ namespace : System.Windows.Forms.CheckBox สำหรับเลือกรายการที่มีอยู่ โดยสามารถเลือกได้หลาย รายการ
CheckBox Properties Text Checked ThreeState CheckState ข้อความที่แสดงบน RadioButton Checked บ่งบอกสถานะ (true = คอนโทรลถูกเลือก) ThreeState กำหนดการแสดงสถานะของการเลือกรายการ (ถ้ากำหนดเป็น true มี 3 สถานะ : สีเข้ม สีเทา สีขาว) CheckState เป็นการตรวจสอบสถานะเมื่อกำหนด ThreeState=true โดยคืนค่า : Checked, Unchecked, Indeterminate
ตรวจสอบการเลือก CheckBox private void button1_Click(object sender, System.EventArgs e) { if (checkBox1.Checked == true) textBox1.Text += checkBox1.Text; if (checkBox2.Checked == true) textBox1.Text += checkBox2.Text; }
CheckBox Event : CheckChanged private void checkBox1_CheckedChanged (object sender, System.EventArgs e) { if (checkBox1.Checked == true) textBox1.Text += checkBox1.Text; } private void checkBox2_CheckedChanged (object sender, System.EventArgs e) if (checkBox2.Checked == true) textBox1.Text += checkBox2.Text;
ListBox อยู่ภายใต้ namespace : System.Windows.Forms.ListBox สำหรับจัดเก็บรายการ สามารถเลือกรายการพร้อมกันได้มากกว่า 1 รายการ
ListBox Properties Items บรรจุรายการลง ListBox MultiColumn กำหนดความสามารถให้ ListBox แสดงรายการได้มากกว่า 1 column SelectionMode กำหนดจำนวนรายการที่เลือกได้ None, One, MultiSimple and MultiExtended SelectedItem แสดงข้อความที่เลือก (1 รายการ) SelectedItems แสดงข้อความที่เลือก (>1 รายการ) SelectedIndex แสดง index ของรายการที่เลือก (1 index) SelectedIndices แสดง index ของรายการที่เลือก (>1 index) Sorted เรียงลำดับรายการใน ListBox
การแสดงข้อความรายการที่เลือก SelectedItem SelectedItems label1.Text=listBox1.SelectedItem.ToString(); for( int i = 0; i< listBox1.SelectedItems.Count;i++) { MessageBox.Show (listBox1.SelectedItems[i].ToString()) ; }
การแสดง index ของรายการที่เลือก SelectedItem SelectedItems label1.Text=listBox1.SelectedIndex.ToString(); for( int i = 0; i< listBox1. SelectedIndices.Count;i++) { MessageBox.Show (listBox1.SelectedIndices[i].ToString()); }
ListBox Methods Items.Add() เพิ่มรายการเข้า ListBox Items.Insert() แทรกรายการเข้า ListBox Items.Remove() ลบรายการที่ระบุออกจาก ListBox Items.RemoveAt() ลบรายการที่เลือกออกจาก ListBox Items.Clear() ลบรายการทั้งหมดออกจาก ListBox Items.Count() นับจำนวนรายการใน ListBox
ListBox Methods : เพิ่มรายการ Items.Add() Items.Insert() listBox1.Items.Add("ข้อความ"); listBox1.Items.Insert(indexที่ต้องการแทรก,"ข้อความ");
ListBox Methods : ลบรายการ Items.Remove() Items.RemoveAt() Items.Clear() listBox1.Items.Remove("ข้อความ"); listBox1.Items.RemoveAt(indexที่ต้องการลบ); listBox1.Items.Clear();
ListBox Events SelectedIndexChanged private void listBox1_SelectedIndexChanged (object sender, System.EventArgs e) { // Add code here }
แบบฝึกหัด Listbox (1) จงเขียนโปรแกรมเพื่อคำนวณราคาหนังสือตามรายการที่เลือก
ComboBox อยู่ภายใต้ namespace : System.Windows.Forms.ComboBox สำหรับจัดเก็บรายการ สามารถแสดงรายการที่เลือกได้ 1 รายการเท่านั้น
label1.Text=comboBox1.SelectedItem.ToString () ; ComboBox Properties SelectedItem SelectedIndex label1.Text=comboBox1.SelectedItem.ToString () ; MessageBox.Show(comboBox1.SelectedIndex.ToString ());
ComboBox Methods : เพิ่มรายการ Items.Add() Items.Insert() comboBox1.Items.Add("ข้อความ"); comboBox1.Items.Insert(indexที่ต้องการแทรก,"ข้อความ");
ComboBox Methods : ลบรายการ Items.Remove() Items.RemoveAt() Items.Clear() comboBox1.Items.Remove("ข้อความ"); comboBox1.Items.RemoveAt(indexที่ต้องการลบ); comboBox1.Items.Clear();
ComboBox Events SelectedIndexChanged private void comboBox1_SelectedIndexChanged (object sender, System.EventArgs e) { // Add code here }