จากที่ได้กล่าวในบทที่ผ่านมาว่าการสร้างโปรแกรมด้วย VB ในขั้นตอนแรกจะเป็นการออกแบบหน้าจอที่ติดต่อกับผู้ใช้ ซึ่งเป็นการนำคอนโทรลที่มีอยู่มาออกแบบฟอร์มให้เหมาะสม โดยจะพบว่าทั้งฟอร์มและคอนโทรลนั้นเป็นเครื่องมือพื้นฐานที่สำคัญในการเขียนโปรแกรมด้วย VB สำหรับในบทนี้จะกล่าวถึงหลักการพื้นฐานเกี่ยวกับฟอร์มและคอนโทรลที่จำเป็นต้องทราบ เพื่อให้เราเข้าใจหลักการในการออกแบบหน้าจอมากขึ้น
จากการเขียนโปรแกรมเริ่มต้นในบทที่ผ่านมาจะพบว่าในการทำงานกับฟอร์มและคอนโทรลผู้เขียนโปรแกรมจะต้องทำความคุ้นเคยกับ 3 คำต่อไปนี้ ในการพัฒนาโปรแกรมเราสามารถกำหนดคุณสมบัติสำหรับคอนโทรลต่างๆ ผ่านทางหน้าต่างคุณสมบัติ (Properties) หรือจะใช้คำสั่งก็ได้ โดยมีรูปแบบดังนี้ การกำหนดคุณสมบัติทั้งสองวิธีจะใช้ในสถานการณ์ที่แตกต่างกัน การกำหนดที่หน้าต่างคุณสมบัติจะใช้ในกรณีที่ต้องการกำหนดค่าตอนโปรแกรมเริ่มทำงาน หรือการออกแบบหน้าจอของโปรแกรม และเมื่อโปรแกรมทำงานอยู่แต่ต้องการเปลี่ยนค่าคุณสมบัติ เราจะใช้การกำหนดผ่านการเขียนโค้ดคำสั่ง 3. อีเวนต์ (Events) เป็นเหตุการณ์ที่เกิดขึ้นบนฟอร์ม หรือคอนโทรลที่เราสามารถใส่คำสั่งเพื่อตอบสนองได้ เช่น ถ้าเราต้องการตอบสนองต่ออีเวนต์ Click ของปุ่มคำสั่งชื่อ Button1 โดยเมื่อคลิกที่ปุ่มแล้วให้ข้อความบนปุ่มเปลี่ยนเป็น Click ดังต่อไปนี้ การเขียนโปรแกรมตอบสนองอีเวนต์ Click ให้กับปุ่มจะเขียนได้โดยดับเบิลคลิกที่ปุ่มเพื่อเข้าสู่หน้าต่างการเขียนโค้ด แล้วเขียนลงไปดังนี้ จากตัวอย่างคำสั่งข้างต้น เมื่อรันโปรแกรมแล้วคลิกปุ่มคำสั่ง คำว่า "Button1" บนปุ่มคำสั่งจะเปลี่ยนเป็น "Click
หลักการที่สำคัญมากประการหนึ่งในการเขียนโปรแกรมด้วย VB ก็คือ เนมสเปซ (Namespaces) ซึ่งจะช่วยทำให้การจัดการไลบรารี คลาส และออบเจ็กต์ เป็นระเบียบมากขึ้นและทำให้เกิดความกำกวมเมื่ออ้างอิงถึงออบเจ็กต์และควบคุมขอบเขตการใช้งานของออบเจ็กต์ ทำให้เราสามารถเรียกใช้คลาสทั้งหมดภายใน WinForms ได้ทันที เช่น เรียกใช้คลาส Button แทนการเขียนคำสั่งว่า System.WinForms.Button ทำให้เขียนโปรแกรม เขียนสั้นกว่าและสะดวกกว่ามาก
ทำให้เราสามารถเรียกใช้คลาสทั้งหมดภายใน WinForms ได้ทันที เช่น เรียกใช้คลาส Button แทนการเขียนคำสั่งว่า System.WinForms.Button ทำให้เขียนโปรแกรม เขียนสั้นกว่าและสะดวกกว่ามาก
ฟอร์มหรือที่เรียกว่าวินโดว์ เป็นเครื่องมือที่ใช้บ่อยมากในการเขียนโปรแกรมด้วย VB ให้ทำงานบนระบบปฏิบัติการวินโดว์ โดยที่ฟอร์มจะเป็นหน้าต่างที่ผู้ใช้ติดต่อทำงานด้วย ผ่านทางคอนโทรลต่างๆ ที่เรานำมาวางบนฟอร์ม ดังนั้น ในหัวข้อนี้จะศึกษาคุณสมบัติ เมธอด และอีเวนต์ของฟอร์มที่จำเป็นต้องใช้ ฟอร์มและคอนโทรลต่างๆ ทีมีใน VB นั้น เป็นคลาสที่มีอยู่ในเนมสเปซชื่อ System.Windows.Forms ซึ่งจะมีคลาสต่างๆ ที่ช่วยเราในการสร้างแอพพลิเคชันที่รันบนวินโดว์ สำหรับความหมายคลาสและออบเจ็กส์จะกล่าวถึงต่อไปในเรื่องการเขียนโปรแกรมเชิงวัตถุ คุณสมบัติที่สำคัญของฟอร์ม คุณสมบัติที่สำคัญของฟอร์ม ตัวอย่างโปรแกรมแสดงการทำงานของฟอร์ม (FormDemo) การออกแบบโปรแกรมทำได้ตามขั้นตอนต่อไปนี้ 3. เมื่อเลือกอีเวนต์แล้ว จะแสดงโปรแกรมย่อยสำหรับแต่ละอีเวนต์ออกมา ให้เขียนโค้ดโปรแกรมให้กับแต่ละอีเวนต์ดังนี้ ให้ทดลองรันโปรแกรมโดยเปิดหน้าต่าง Output เพื่อแสดงคำสั่ง Console.WriteLine โดยกดคีย์บอร์ด <Ctrl+Alt+O> แล้วรันโปรแกรม เมื่อคลิกเมาส์หรือกระทำกับฟอร์ม โปรแกรมจะแสดงผลลัพธ์ดังนี้
การเขียนโปรแกรมด้วย VB โดยทั่วไปแล้วจะเป็นการเขียนโปรแกรมให้ทำงานในระบบวินโดว์ซึ่งจะใช้วิธีติดต่อกับผู้ใช้แบบกราฟิก ในการออกแบบโปรแกรมนั้น VB มีคอนโทรลให้เลือกใช้มากมาย โดยคอนโทรลต่างๆ จะเก็บไว้ในทูลบ็อกซ์ (Toolbox) คอนโทรลแต่ละตัวจะมีคุณสมบัติและอีเวนต์ให้เลือกใช้ ในหัวข้อนี้จะกล่าวถึงคอนโทรลพื้นฐานที่ใช้บ่อยๆ ส่วนคอนโทรลอื่นๆ จะกล่าวต่อไปเมื่อต้องนำคอนโทรลตัวนั้นมาใช้งาน คอนโทรลปุ่มคำสั่ง (Button) • เกิดจากผู้ใช้กดคีย์ < Alt + ตัวอักษรที่ขีดเส้นใต้อยู่ > คอนโทรลเลเบล (Label) เมื่อนำเลเบลมาวางบนฟอร์มโปรแกรมจะตั้งชื่อเลเบลแรกให้เป็น Label1 ซึ่งผู้ใช้สามารถเปลี่ยนชื่อได้ในหน้าต่างคุณสมบัติ และสามารถกำหนดข้อความให้เลเบลได้ในคุณสมบัติ Text นอกจากนี้ยังเขียนโปรแกรมให้เปลี่ยนข้อความของเลเบลได้อีกด้วยโดยกำหนดค่าสตริงลงไปให้กับคุณสมบัติ Text ของเลเบลที่เลือก ตัวอย่างเช่น ถ้าต้องการใช้เลเบลชื่อ Label1 แสดงคำว่า Computer จะเขียนได้ดังนี้ คอนโทรลเท็กซ์บ็อกซ์ (TextBox) สำหรับข้อความที่อ่านจากเท็กซ์บ็อกซ์หรือเขียนลงไปในเท็กซ์บ็อกซ์จะเป็นข้อความชนิดสตริง สำหรับตัวอย่างการประยุกต์ใช้งานให้ศึกษาจากตัวอย่างโปรแกรม ตัวอย่าง เป็นการออกแบบโปรแกรมโดยนำคอนโทรลกดปุ่ม เลเบล และเท็กซ์บ็อกซ์มาใช้ โดยโปรแกรมที่สร้างขึ้นจะให้เราใส่ชื่อและนาม-สกุลลงไป เมื่อใช้เมาส์คลิกที่ปุ่ม Show โปรแกรมจะแสดงข้อความที่ใส่เข้าไปออกมาทางเท็กซ์บ็อกซ์อีกช่องหนึ่ง 2. ปรับค่าคุณสมบัติให้กับคอนโทรลและฟอร์มดังต่อไปนี้ 3. เขียนโปรแกรม โดยจากข้อกำหนดของโปรแกรมเมื่อคลิกปุ่มจะต้องอ่านข้อมูลจาก เท็กซ์บ็อกซ์ชื่อ TextBox1 มาแสดงผลในเท็กซ์บ็อกซ์ชื่อ Text2 ดังนั้นจะต้องเขียนโปรแกรมให้เป็น อีเวนต์ของปุ่มกด ให้ดับเบิลคลิกที่ปุ่มกดบนฟอร์มแล้วเขียนคำสั่งลงไปดังต่อไปนี้ ต้องการให้เท็กซ์บ็อกซ์ที่สองแสดงเครื่องหมาย # ตอนเริ่มต้นโปรแกรม ดังนั้นจะต้องเขียน อีเวนต์ให้กับฟอร์มตอนที่โหลดโปรแกรม ซึ่งทำได้ดังนี้ คำสั่งทั้งหมดของโปรแกรมจะเป็นดังนี้ ให้ทดลองรันโปรแกรม ผลลัพธ์จะเป็นดังนี้ คอนโทรลเช็คบ็อกซ์ (CheckBox) ในบางครั้งการสร้างโปรแกรมจะต้องการให้ผู้ใช้เลือกตัวเลือกที่ต้องการได้ ซึ่งจะทำให้โปรแกรมใช้งานได้สะดวกกว่าการคีย์ข้อมูลเข้าไปในเท็กซ์บ็อกซ์ คอนโทรลเช็คบ็อกซ์เป็นคอนโทรลที่จะให้ผู้ใช้เลือกว่าจะเช็ค (ให้มีเครื่องหมายถูกในช่อง) หรือไม่เช็ค (ไม่มีเครื่องหมายถูก) เพียงอย่างใดอย่างหนึ่งเท่านั้น ค่าของคอนโทรลเช็คบ็อกซ์จะหาได้จากค่าคุณสมบัติ Ckecked ที่มีค่าเป็น True กับ False หรือคุณสมบัติ CheckState ซึ่งจะมีค่าดังตารางต่อไปนี้ สำหรับสถานะ Indeterminate เป็นสถานะที่ใช้ในกรณีที่เราต้องการตัวเลือกที่สามารถเลือกได้สามสถานะ คือ ใช่, ไม่ หรือไม่แน่ใจ เราสามารถกำหนดสถานะ Indeterminate ได้โดยการเขียนโค้ด แต่ถ้าเราต้องการให้ผู้ใช้โปรแกรมสามารถเลือกสถานะ Indeterminate ได้เอง คือ สามารถเลือก เช็คบ็อกซ์ได้สามสถานะ เราต้องการกำหนดคุณสมบัติ Threestate ของเช็คบ็อกซ์ตัวนั้นให้เป็น True จากรูปที่ผ่านมา ถ้าหากต้องการกำหนดคุณสมบัติโดยการเขียนโค้ดจะเขียนได้ดังนี้ ถ้าหากในฟอร์มที่เช็คบ็อกซ์อยู่หลายเช็คบ็อกซ์ เราสามารถเลือกเช็คได้หลายเช็คบ็อกซ์พร้อมกันได้ นอกจากนี้ถ้าหากต้องการกำหนดข้อความที่แสดงบนคอนโทรลตัวนี้ เราสามารถทำได้ผ่านทางคุณสมบัติ Text นอกจากนี้ยังมีคุณสมบัติ CheckAlign ที่ใช้กำหนดตำแหน่งของตัวเช็คบ็อกซ์ได้อีกด้วย คอนโทรลเรดิโอบัตทอน (RadioButton) คอนโทรลกรุ๊ปบ็อกซ์ (GroupBox) ตัวอย่าง แสดงการนำกรุ๊ปบ็อกซ์ เรดิโอบัตทอน และคอนโทรลอื่นๆ มาวางบนฟอร์มให้สร้างโปรเจ็กต์แล้วออกแบบฟอร์มพร้อมทั้งกำหนดชื่อดังต่อไปนี้
1. นำคอนโทรลกรุ๊ปบ็แกซ์มาวางบนฟอร์ม แล้วเปลี่ยนคุณสมบัติ Text เป็น “ป้อนข้อมูล” สำหรับการรันโปรแกรมให้ทดลองดังนี้ จาการรันโปรแกรมจะพบว่าเรดิโอบัตทอนที่อยู่ใกล้กรุ๊ปบ็อกซ์เดียวกันจะถูกเลือกได้เพียงตัวเดียวเท่านั้น ในการออกแบบโปรแกรม ถ้าหากบนฟอร์มมีเรดิโอบัตทอนหลายตัว และต้องการเลือกมากกว่าหนึ่งตัว จะต้องนำกรุ๊ปบ็อกซ์มาประยุกต์ใช้ คอนโทรลลิสต์บ็อกซ์ (ListBox) และคอมโบบ็อกซ์ (ComboBox) การเพิ่มตัวเลือกลงไปในรายการของคอนโทรลทั้งสองตัวทำได้โดยเรียกใช้เมธอด Add ของคอลเลคชัน Items ดังตัวอย่างต่อไปนี้ (คอลเลคชันเป็นกลุ่มของออบเจ็กต์ชนิดเดียวกัน ซึ่งจะอธิบายเพิ่มเติมในเรื่องการเขียนโปรแกรมเชิงวัตถุ )
ลิสบ็อกซ์เป็นคอนโทรลที่ใช้แสดงรายการดังที่กล่าวมา ผู้ใช้สามารถคลิกเมาส์เลือกตัวเลือกที่ต้องการได้จากรายการที่แสดงในลิสต์ โดยรายการที่ผู้ใช้เลือกจะถูกนำมาเก็บไว้ในคุณสมบัติ Text ของลิสต์บ็อกซ์ตัวนั้น สำหรับลิสต์บ็อกซ์และคอมโบบ็อกซ์นั้นมีอีเวนต์ที่สำคัญ คือ SelectedIndexChanged ที่เกิดเมื่อมีการเลือกตัวเลือก ส่วนของคอมโบบ็อกซ์นั้นจะมีอีเวนต์ที่สำคัญคือ TextChanged ซึ่งจะเกิดขึ้นเมื่อมีการเปลี่ยนข้อความในคอมโบบ็อกซ์
ขั้นตอนการสร้างโปรแกรมทำได้ดังนี้ 2. ใช้เมาส์คลิกที่ฟอร์ม แล้วเลือกอีเวนต์ Load ที่หน้าต่างคุณสมบัติ ดับเบิลคลิกที่ Load เพื่อเข้าสู่หน้าต่างการเขียนโปรแกรม แล้วเขียนโปรแกรมกำหนดค่าเริ่มต้นให้กับลิสต์บ็อกซ์ และ คอมโบบ็อกซ์ 3. ใช้เมาส์คลิกที่ลิสต์บ็อกซ์ แล้วเลือกอีเวนต์ SelectedIndex ที่หน้าต่างคุณสมบัติดับเบิลคลิกเพื่อเข้าสู่หน้าต่างการเขียนโปรแกรม แล้วเขียนโปรแกรมให้แสดงข้อความที่เลือกทางกล่องข้อความ Public Class Form1 จากนั้นให้ทดลองรันโปรแกรม แล้วเลือกรายการต่างๆ และสังเกตผลที่ได้ นอกจากนี้เรายังสามารถแทรกรายการเข้าไปในลิสบ็อกซ์ได้ โดยเรียกใช้เมธอด Insert ของคุณสมบัติ Items ซึ่งมีรูปแบบดังน ถ้าหากต้องการเพิ่มรายการ โดยแทรกระหว่างรายการที่มีอยู่แล้วข้างต้น ให้เราใส่พารามิเตอร์ Index (ตำแหน่งที่จะใส่) ลงไปด้วย ดังตัวอย่าง นอกจากวิธีการใช้คำสั่ง เรายังสามารถเพิ่มรายการเข้าไปในลิสต์บ็อกซ์ในตอนออกแบบโปรแกรมได้ด้วย โดยการใส่รายการที่ต้องการให้มีลิสต์บ็อกซ์เข้าไปในคุณสมบัติ Item ในหน้าต่างคุณสมบัติ ดังรูป การเรียงรายการในลิสต์บ็อกซ์ การลบรายการออกจากลิสต์บ็อกซ์ จากรูปแบบข้างต้น Index เป็นตำแหน่งของรายการที่จะลบออกจากลิสต์บ็อกซ์ โดย O คือตำแหน่งรายการที่ 1 แต่ถ้าหากต้องการลบรายการทั้งหมดออกจากลิสต์บ็อกซ์ให้ใช้เมธอด Clear โดยมีรูปแบบดังนี้ การเข้าถึงรายการในลิสต์บ็อกซ์ โดย Index จะเป็นตำแหน่งที่เราต้องการเข้าถึงค่าของรายการในลิสต์บ็อกซ์ ตัวอย่างเช่นถ้าหากเขียนคำสั่งเป็น กำหนดค่า Index เป็น 0 เมื่อรันโปรแกรมจะแสดงรายการแรกสุดออกมาทางหน้าต่าง Output แต่ถ้าต้องการแสดงรายการที่ถูกเลือก ณ เวลานั้น จะใช้คุณสมบัติ SelectedIndex ซึ่งเป็นคุณสมบัติที่มีตอนรันโปรแกรมเท่านั้น โดยคุณสมบัตินี้จะคืนค่า Index หรือตำแหน่งที่ผู้ใช้ได้เลือกไว้ ถ้าค่านี้เป็น -1 หมายความว่ายังไม่มีรายการใดถูกเลือก
การกำหนดวิธีเลือกรายการในลิสต์บ็อกซ์ ตัวอย่าง เป็นตัวอย่างการเขียนโปรแกรมรับข้อมูลจากเท็กซ์บ็อกซ์ เมื่อคลิกปุ่ม Add จะนำข้อมูลไปในลิสต์บ็อกซ์ วิธีการออกแบบโปรแกรม 2. เขียนโปรแกรมให้กับปุ่ม Add โดยดับเบิลคลิกที่ปุ่มแล้วเขียนโปรแกรมอ่านข้อมูลจากเท็กซ์บ็อกซ์ไปเพิ่มในลิสต์บ็อกซ์
การกำหนดค่ารูปแบบของคอมโบบ็อกซ์ เราสามารถกำหนดรูปแบบของคอมโบบ็อกซ์ได้ โดยผ่านทางคุณสมบัติ DropDownStyle โดยคอมโบบ็อกซ์มีรูปแบบที่ใช้งานอยู่ 3 รูปแบบดังตารางต่อไปนี้ สำหรับรายละเอียดของคอมโบบ็อกซ์แต่ละรูปแบบเป็นดังนี้ 2. ดรอปดาวน์คอมโบบ็อกซ์ (Dropdown ComboBox) เป็นคอมโบ บ็อกซ์ที่มีลักษณะดังรูป ซึ่งผู้ใช้สามารถใส่ค่าลงไปได้โดยตรง หรือเลือกจากรายการที่มีอยู่ได้ โดยการคลิกที่ปุ่มลูกศรชี้ลง เมื่อเลือกตัวเลือกใดในรายการแล้ว ตัวเลือกนั้นจะแสดงอยู่ช่องข้างบนสุดของคอนโทรล 3. ดรอปดาวน์ลิสต์บ็อกซ์ (Dropdown ListBox) เป็นคอมโบบ็อกซ์ที่มีลักษณะดังรูป เป็นคอมโบบ็อกซ์ที่คล้ายกับลิสต์บ็อกซ์แต่จะประหยัดเนื้อที่ที่ใช้แสดงรายการมากกว่า โดยที่เราต้องคลิกเมาส์ปุ่มลูกศรลงเพื่อดูรายการทั้งหมด และคอมโบบ็อกซ์แบบนี้จะไม่สามารถใส่ค่าเองได้ จะเลือกข้อมูลจากรายการที่มีอยู่ได้เท่านั้น สำหรับการเพิ่มรายการ การเรียงรายการ การลบรายการ การหาตำแหน่งรายการ การเข้าถึงรายการ เป็นส่วนที่มีการใช้งานเหมือนกับลิสต์บ็อกซ์ทุกประการ ดังนั้นเราสามารถย้อนกลับไปดูวิธีจัดการได้ ในเนื้อหาของลิวต์บ็อกซ์ คอนโทรลพิกเจอร์บ็อกซ์ (PictureBox) ตัวอย่าง แสดงการใช้พิกเจอร์บ็อกซ์เบื้องต้น โดยเขียนโปรแกรมให้คลิกปุ่ม Show แล้วแสดงรูปภาพ ให้สร้างโปรเจ็กต์ใหม่ตามขั้นตอนต่อไปนี้ 4. เมื่อคลิกปุ่มเลือกรูปภาพจะปรากฏหน้าต่าง Select Resource ให้คลิกปุ่ม Import แล้วเลือกไฟล์รูปภาพจากเครื่องคอมพิวเตอร์ จากนั้นคลิกปุ่ม OK 5. เลือกคุณสมบัติ Visible ของพิกเจอร์บ็อกซ์ให้เป็น False เพื่อไม่ให้แสดงภาพ และ เลือก SideMode ให้เป็น StretchImage 6. เขียนโปรแกรมให้กับปุ่มคำสั่ง โดยดับเบิลคลิกที่ปุ่ม Show แล้วเขียนโค้ดโดยเปลี่ยนคุณสมบัติ Visible เป็น True เมื่อรันโปรแกรมแล้วใช้เมาส์คลิกที่ปุ่ม Show โปรแกรมจะแสดงภาพออกมา ดังนี้ |