เรื่องของคลาสมันเป็นเรื่องยาว ทฤษฎี อ่านแล้วงง ฟังจบแล้วทึ่ง เลยต้องทำเป็นตอน ๆ แบบ StarWar ต้องเอาตอนจบไว้ภาคแรก ๆ แล้วค่อยย้อนกลับไปอดีต บทความนี้ก็เหมือนกัน เอาตอนจบไว้ภาคแรกเลย เพื่อให้เห็นภาพที่เราจะย้อนไปจุดเริ่มต้นได้
เวลาเราสร้างฟอร์ม เราต้องลาก โน่น ลาก นี่จาก Toolbox มาวาง เช่น ลาก TextBox หรือ Button มาวาง ดังภาพ
สิ่งต่าง ๆ ที่อยู่ใน Toolbox ที่เราลากมา เราจะเรียกมันว่า เบสคลาส (base class) ซึ่งเป็นต้นเรื่องของทุกสิ่ง แต่ไอ้ตัวตนเรื่องนี่สิ มันทำให้เกิดเรื่อง(นี้) ตอนมันอยู่ดี ๆ ใน toolbox มันเป็น คลาส แต่พอลากมาวาง มันกลายเป็นออบเจกต์ (object) หรือภาษาไทยเรียกว่าวัตถุ แต่เนื่องจาก Microsoft เป็นบริษัทช่างคิด คิดหลายตลบ สรุป คิดให้คลาสที่ตัวเองสร้างขึ้นให้มันโง่ที่สุด โง่หรือไม่ดูที่ คลาส TextBox ที่สร้างขึ้นมา มันโง่สิ้นดี ความโง่อันดับแรกคือกด Enter แล้วจะให้มันออกจาก TextBox ก็ไม่ได้ ดันให้ใช้ปุ่ม tab ตานี้ต้องมาเป็นหน้าที่ของคนเขียนโปรแกรมเขียนยัดใส่ไว้ว่า ถ้ากดปุ่ม Enter ใน textbox ตัวนี้เมื่อไหร่ ให้ส่งคำสั่ง tab ไปเพื่อเลื่อนไปช่องถัดไป
เอาล่ะหว่า ฟอร์มแต่ละฟอร์ม มี TextBox เป็นสิบ (ยังไม่นับคลาสตัวอื่นที่เอามาสร้างอีกเป็นกระบุง) เขียนคำสั่งกันตาเหลือกแน่ แต่เรากำลังกล่าวถึง OOP (วิธีการเขียนโปรแกรมแนวบ้านกับรถ) ซึ่งคลาสนั้นจะมีคุณสมบัติสืบทอด (inheritance) จากคลาสแม่แบบที่เราเรียกว่า base class ไปเป็นคลาสย่อย (sub class) หรือคลาสลูก แล้วลูกก็สามารถสร้างลูกต่อไปได้เรื่อย ๆ เฮ้อออ สรุปว่า งง อยู่ดี
กลับมาที่ตัวก่อเรื่อง คือ TextBox ถ้าเราต้องการให้มันรู้จักปุ่ม Enter ในการเลื่อนไปที่อื่น เราก็ต้องปฎิสนธิให้มันเพื่อให้มันเกิดลูกขึ้นมา กลายเป็น sub class ของ TextBox ตัวใหม่ สำหรับวิธีการปฎิสนธิมันเหรอมีขั้นตอน ดังนี้
1. เปิดโปรแกรม Visual Studio 20xx
2. ไปที่เมนู File -> New Project...
3. ที่หน้าต่าง New Project คลิกเลือกที่ Windows Forms Application แล้วที่ช่อง Name ใส่ชื่อเป็น myFirstClass แล้วคลิกปุ่ม OK (คลาสแรกของฉัน)
4. จากนั้นจะขึ้น ฟอร์ม มาให้เขาเขียนคำสั่ง ตอนนี้ไม่ต้องสนใจ ปล่อยมันไปก่อน
5. ไปที่เมนู Project เลือก Add Class... ก็ได้
6. ที่หน้าต่าง Add New Item ให้คลิกเลือก Class แล้วตรงส่วนของ Name ตั้งชื่อเป็น KTextBox แล้วคลิกปุ่ม Add ดังภาพ (ตัว K ย่อมาจาก Kasem)
7. จะขึ้นหน้าต่างให้ป้อนคำสั่ง ให้ทำการป้อนคำสั่ง ดังนี้
Public Class KTextBox
Inherits System.Windows.Forms.TextBox
Private Sub OnTextBox_KeyPress(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyPressEventArgs) _
Handles Me.KeyPress
If e.KeyChar = Chr(Keys.Enter) Then
SendKeys.Send("{TAB}")
End If
End Sub
End Class
8. ให้ไปที่เมนู Build > Build myFirstClass (ชื่อโปรเจกต์ที่เราตั้งขึ้นตอนแรก) หากไม่มี error อะไรเกิดขึ้น เราสร้างคลาสเสร็จแล้ว
9. กลับไปที่ Form1.vb ให้คุณดูที่หน้าต่าง Toolbox ไล่ดูให้ทั่วจะเห็น myFirstclass Components ที่เราสร้างขึ้นมา ให้คุณทำการลาก sub class ชื่อ KTextBox มาวางไว้ที่ฟอร์ม ดังภาพ
10. จากนั้นกดปุ่ม F5 เพื่อสั่งให้ฟอร์มทำงาน ลองทดสอบดูโดยการกดปุ่ม enter ที่ textbox แต่ละตัว
เป็นอย่างไรบ้างการสืบทอดคลาส และวิธีการเรียกใช้งาน
อธิบายคำสั่ง
Public Class KTextBox -> สร้างคลาสชื่อ KTextBox
Inherits System.Windows.Forms.TextBox -> คลาสที่สร้างสืบทอดมาจากพ่อแม่มันคือ TextBox
ส่วน ล่างนี้คือ subroutine สำหรับตรวจสอบการกดปุ่ม
Private Sub OnTextBox_KeyPress(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyPressEventArgs) _
Handles Me.KeyPress
If e.KeyChar = Chr(Keys.Enter) Then
SendKeys.Send("{TAB}")
End If
End Sub
การบ้าน ให้แก้ไขคลาส KTextBox โดยกำหนดให้ textbox ของเรามีค่าเริ่มต้นดังนี้
font เป็น Tahoma , size 10
width เป็น 100
height เป็น 22
(ใบให้นิดนึง มันเกี่ยวกับ constructor )
โชคดี มีคลาสใช้ ทำดูหลาย ๆ คลาส แล้วจะรู้ว่ามันไม่ใช่แค่บ้านกับรถ
เฉลยการบ้าน
ทำโดยการเพิ่ม constructor เข้าไปในคลาส ดังนี้
Public Class KTextBox
Inherits System.Windows.Forms.TextBox
Sub New()
Dim FontName As String = "Tahoma"
Dim FontSize As Integer = 10
Dim FS As New Font(FontName, FontSize, FontStyle.Regular)
Me.Font = FS
Me.Width = 100
Me.Height = 22
End Sub
Private Sub OnTextBox_KeyPress(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyPressEventArgs) _
Handles Me.KeyPress
If e.KeyChar = Chr(Keys.Enter) Then
SendKeys.Send("{TAB}")
End If
End Sub
End Class
ไว้พบกันตอน Episode 2
3 ความคิดเห็น:
ขอบคุณบทความดีดีครับผม
เป็นตัวอย่างที่ง่าย แต่ให้ความรู้ที่ดีมากครับ
เป็นตัวอย่างที่ง่าย แต่ให้ความรู้ที่ดีมากครับ
แสดงความคิดเห็น