24 กันยายน 2553

VB.Net Class Episode 1 การสร้างคลาส

เคยไหมเวลาพูดถึงเรื่องคลาสทีไร งงทุกที ไปหาตัวอย่างที่เขายกขึ้นมา เห็นมีแต่ตัวอย่าง บ้าน หรือไม่ก็ รถ อ่านจบก็งง จะเขียนโปรแกรมมันไปเกี่ยวอะไรกับบ้านหรือรถ(ว่ะ) สรุปเกาหัว ผละออกมาดีกว่า ผลสรุปเขียนไม่เป็นซักที หลายครั้งไปเจอเพื่อน ๆ พอคุยเรื่องการเขียนโปรแกรมแนว OOP ส แกก็เล่ามาว่า ได้เชิญวิทยากร อันดับ 101 ของไทยมาอบรม วิทยากรบรรยาย เกี่ยวกับ OOP ได้เยี่ยมมาก ทฤษฎีเป๊ะ ๆ มีรถสีอะไร บ้านต้องมีหน้าต่างกี่บ้านประตูกี่บาน สีอะไร โห ฟังไปเคลิ้มไป บรรยายเก่งมาก ๆ ยกนิ้วให้เลย พอเรียนจบ เกาหัว งานนี้ได้เพิ่มเหามาอีก สรุปกลับมาก็ยังเขียนโปรแกรมแนวสร้างบ้านไม่เป็น ทั้ง ๆ ที่เป็นคนเขียนโปรแกรมและทำระบบมาก่อน จริง ๆ โทษใครไม่ได้ ต้องโทษตัวเอง (คงจะแก่เกินเรียนแล้วล่ะ) เอาล่ะ ไม่เป็นไร วันก่อนฟังเรื่องราวของกระดุมเม็ดแรก จำชื่อ อ. ผู้แต่งเรื่องนี้ไม่ได้ต้องกราบขออภัยด้วย เวลาเราใส่เสื้อถ้าเราเผลอไปติดกระดุมเม็ดแรกผิด จะสังเกตว่ามันจะผิดไปจนหมด อิๆ กว่าจะรู้ตัวก็โน่นไปเป็นสุดท้าย เมื่อติดผิดก็ต้องเลาะใหม่หมด แล้วเริ่มใหม่ (อ้าวไปนอกเรืองซะแล้ว) แต่โปรแกรมไม่ใช่กระดุม แต่มันก็ใกล้เคียงกัน บางทีผิดนิดเดียว แต่ต้องรื้อใหม่หมด แต่ก็มีข้อดี ยิ่งเขียนผิด เขียนแล้วมี Error คนเขียนยิ่งเก่ง (ถ้ามันไม่เลิกเขียนไปซะก่อน) การเขียนโปรแกรมคือการแก้ปัญหา ใครมีปัญหาอะไรก็มาให้เราแก้ให้ จำไว้ว่ายิ่งเขียนยิ่งได้บุญ (ตังค์ก็ได้ด้วย) นอกเรื่องไปซะนาน คลาส (class) ก็ไม่ใช่กระดุม แต่มันก็มีลักษณะเหมือนกระดุม เป็นเม็ด ๆ มีหน้าที่ในตัวมัน อิๆ ไม่ได้ยกตัวอย่างเรื่องบ้าน กับ รถ แล้วน่ะ แต่เป็น กระดุม เข้าเรื่องดีกว่า

เรื่องของคลาสมันเป็นเรื่องยาว ทฤษฎี อ่านแล้วงง ฟังจบแล้วทึ่ง เลยต้องทำเป็นตอน ๆ แบบ 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 ความคิดเห็น:

T15 กล่าวว่า...

ขอบคุณบทความดีดีครับผม

Unknown กล่าวว่า...

เป็นตัวอย่างที่ง่าย แต่ให้ความรู้ที่ดีมากครับ

Unknown กล่าวว่า...

เป็นตัวอย่างที่ง่าย แต่ให้ความรู้ที่ดีมากครับ

"I Believe in You"

Copyright(c) 2007 - 2022 by Kasem Kamolchaipisit.