ผู้เขียน หัวข้อ: การทำ Delegate บน VB.NET 2005  (อ่าน 7913 ครั้ง)

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

ออฟไลน์ กรรมกรไอที

  • Hero Member
  • *****
  • กระทู้: 584
  • เมื่อเทคโนโลยีคือลมหายใจของเรา
  • Respect: +6
    • ดูรายละเอียด
การทำ Delegate บน VB.NET 2005
« เมื่อ: กรกฎาคม 05, 2007, 10:12:28 AM »
0
สวัสดีครับ ไม่เข้ามาแวะใน HosXP เสียนาน เช้านี้ว่าง ๆ เลยนั่งเขียนบทความเกี่ยวกับการเขียนโปรแกรมด้วย VB.NET 2005 มาให้พี่ ๆ น้อง ๆ ที่สนใจอ่านครับ (คงไม่มีใครว่าผมที่ผมเอา VB พูดในกลุ่ม Delphi นะครับ  :) ) วันนี้ผมหยิบยกเรื่องการทำ Delegate มาพูดให้ฟัง การทำ Delegate เป็น pointer function ซึ่งกำหนดให้ sub ใด ๆ หรือ function ใด ๆ ทำงานแทน พูดแล้วอาจงงครับ ไปดูตัวอย่างกันเลยดีกว่า


จากตัวอย่าง ผมทำโปรแกรมเล็ก ๆ โดยกำหนดชื่อ controls ตามภาพเลยครับ และตัวอย่าง code ของโปรแกรมอยู่ด้านล่างครับ

=====================================================================
Public Class Form1

    Private Delegate Sub TestCommand()
    Private Delegates As TestCommand

    Private Sub SetDelegates()
        If Me.r1.Checked Then
            Delegates = New TestCommand(AddressOf SayHelloWorld)
        ElseIf Me.r2.Checked Then
            Delegates = New TestCommand(AddressOf SayHelloHosxp)
        ElseIf Me.r3.Checked Then
            Delegates = New TestCommand(AddressOf InputNumber)
        ElseIf Me.r4.Checked Then
            Delegates = New TestCommand(AddressOf SayHelloWorld)
            Delegates = System.Delegate.Combine(Delegates, New TestCommand(AddressOf SayHelloHosxp), _
                                New TestCommand(AddressOf InputNumber))
        Else
            Exit Sub
        End If
    End Sub

    Private Sub SayHelloWorld()
        MessageBox.Show("Hello World", "Delegate!!!", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
    End Sub

    Private Sub SayHelloHosxp()
        MessageBox.Show("Hello HosXP !!!", "Delegate!!!", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
    End Sub

    Private Sub InputNumber()
        lv.Items.Clear()
        For i As Integer = 1 To 100
            lv.Items.Add("My number is " & i)
        Next
    End Sub

    Private Sub bt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt.Click
        Delegates()
    End Sub

    Private Sub r1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles r1.CheckedChanged
        SetDelegates()
    End Sub

    Private Sub r2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles r2.CheckedChanged
        SetDelegates()
    End Sub

    Private Sub r3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles r3.CheckedChanged
        SetDelegates()
    End Sub
End Class
=====================================================================

จากตัวอย่างจะเห็นว่าเมื่อผมกดปุ่ม bt ลงไปจะไปสั่งให้ Delegates ทำงาน ซึ่งตัว Delegates ก็อ้างอิงไปถึง TestCommand จึงสั่งไปให้ TestCommand เลือกรูปแบบการทำงานตามคำสั่งจาก sub SetDelegates กล่าวคือ ผมจะไล่ step การทำงานตาม code นี้ให้ดูนะครับ
1.bt_click
2.เรียก SetDelegates ทำงาน ภายใน SetDelegate จะมองดูว่าเงื่อนไขไหนเป็นจริง เช่น เงื่อนไข r1 เป็นจริง ก็จะทำงานต่อว่าไปถาม TestCommand ให้เรียก sub SayHelloWorld ขึ้นมาทำงาน

คงเข้าใจกันนะครับ สำหรับคนที่สนใจก็ลองไปดูครับ เพราะเรื่องของ Delegate มีประโยชน์มากในหลายเรื่อง เช่นการ Add Handler หรือการทำ Thread ก็ลองดูนะครับ พี่ ๆ น้อง ๆ ใครที่สนใจหรือใช้ VB.NET อยู่แวะเวียนมาคุยกันได้นะครับจะได้แลกเปลี่ยนประสบการณ์กัน ขอบคุณมากครับ
« แก้ไขครั้งสุดท้าย: กรกฎาคม 05, 2007, 10:16:25 AM โดย เภสัชกร »
 

ออฟไลน์ กรรมกรไอที

  • Hero Member
  • *****
  • กระทู้: 584
  • เมื่อเทคโนโลยีคือลมหายใจของเรา
  • Respect: +6
    • ดูรายละเอียด
Re: การทำ Delegate บน VB.NET 2005
« ตอบกลับ #1 เมื่อ: กรกฎาคม 05, 2007, 11:52:01 AM »
0
มีหนังสือเกี่ยวกับหลักการและกฏของ GPL ชื่อว่า "Understanding Open Source and Free Software Licensing" มาให้อ่านครับ ใครสนใจก็เข้าไป DL ครับ ขนาดไฟล์ประมาณ 410K > http://www.filefactory.com/file/bddb46/