thongkorn โพสต์ 2017-11-14 13:03:03

[VB.NET] แจกโค้ดการสร้าง TabControl, Panel และ Button Control แบบ Run Time โปรเจคทองก้อนเบอเกอร์แดนซ์

http://www.g2gnet.com/webboard/images/vbnet/BurgerCreateControl.png
จาก 2 ภาคที่ได้แจกแจงไปแล้ว สำหรับโปรเจคทองก้อนเบอเกอร์แดนซ์ หวังว่าหลายคนคงน่าจะเห็นภาพที่ชัดเจนมากยิ่งขึ้นแล้วน่ะครับ มาภาคนี้เราจะสร้าง Control เพื่อให้ทำงานแบบที่เรียกว่า Dynamic กันแบบเต็มตัวสักที เพราะเราไม่รู้ว่ามีอาหาร เครื่องดื่มกี่ประเภท (อันนี้ใช้ TabControl) แล้วก็ยังไม่รู้อีกว่าจำนวนรายการอาหาร หรือเครื่องดื่มที่มีอยู่เป็นจำนวนเท่าไหร่ (อันนี้ใช้ปุ่มคำสั่ง Button Control) และสุดท้ายคือการใช้ Panel Control เพื่อตีกรอบจำนวนปุ่มเอาไว้ไม่ให้ล้น ...

มาดูส่วนสำคัญในการสร้างปุ่ม (Button) เพื่อแสดงรายการอาหารและเครื่องดื่ม
    ' / -------------------------------------------------------------------
    ' / สร้างปุ่มคำสั่ง (Button) แบบ @RunTime ตามจำนวนหลัก, จำนวนปุ่ม
    Private Sub AddButtons(ByVal ColCount As Byte, ByVal MaxBtn As Byte)
      For i As Integer = 0 To MaxBtn - 1
            Dim B As New Button
            pn.Controls.Add(B)
            With B
                .Height = 80    '/ กำหนดความสูง
                .Width = 100    '/ กำหนดความกว้าง

                ' / -------------------------------------------------------------------
                '// เช่น จำนวนหลัก = 4 และจำนวนปุ่ม = 10
                '// คำนวณหาระยะในแนวนอน คิดระยะซ้าย (Left) ตามหลัก (Column)
                '/ i Mod 4 การหารเอาเศษ คำตอบจะได้ คือ 0, 1, 2 และ 3 (จำนวนหลัก - 1 คือ ค่าสูงสุด)
                '/ เมื่อ i = 0
                '/ 0 Mod 4 = 0 ระยะทางซ้ายหลักแรกของปุ่มที่จะแสดงผลคือ 0
                '/ เมื่อ i = 1
                '/ 1 Mod 4 = 1 หลักที่ 2 ของปุ่มที่จะแสดงผลคือ 1 * 100 = 100
                '/ เมื่อ i = 2
                '/ 2 Mod 4 = 2 หลักที่ 3 ของปุ่มที่จะแสดงผลคือ 2 * 100 = 200
                '/ เมื่อ i = 3
                '/ 3 Mod 4 = 3 หลักที่ 4 ของปุ่มที่จะแสดงผลคือ 3 * 100 = 300
                .Left = (i Mod ColCount) * B.Width
                '/ เมื่อ i = 4
                '/ 4 Mod 4 = 0 ระยะทางซ้ายหลักแรกของปุ่มที่จะแสดงผลคือ 0 * 100 = 0
                '/ จากนั้นก็เกิดค่าเศษเป็น 0, 1, 2, 3 ซ้ำใหม่อีกจนกว่าจะหมดจำนวนปุ่ม

                ' / -------------------------------------------------------------------
                '// เช่น จำนวนหลัก = 4 และจำนวนปุ่ม = 10
                '// คำนวณหาระยะในแนวตั้ง คิดระยะบนสุด (Top) ด้วยการหารตัดเศษ (จะได้เลขจำนวนเต็ม)
                '/ เมื่อ i = 0, 1, 2, 3 (ทุกตัวมีค่าน้อยกว่าตัวหาร) ทำให้ Top = 0 นั่นคือ 4 หลักแรกจะถูกกำหนดค่า Top คงที่ = 0
                '/ เมื่อ i = 4, 5, 6, 7 หากหารตัดเศษด้วย 4 คำตอบมีค่าเป็น 1 หมด ทำให้ 1 * 80 = 80 ... แถวนี้จึงถูกตรึง Top ไว้ที่ 80
                .Top = (i \ ColCount) * B.Height
                .Text = Chr((i \ ColCount) + Asc("A")) & i Mod ColCount + 1
                Buttons.Add(B.Text, B)
                '// ค่านี้นำไปซ่อนใน Tag ซึ่งหากเราดึงจากฐานข้อมูลมามันก็คือค่า PK หรือ Primary Key
                .Tag = i
                .Cursor = Cursors.Hand
            End With
            '// การสร้าง Events handler ซึ่งจะทำให้ลดปริมาณชุดคำสั่งในการกดปุ่ม ให้เหลือแค่ชุดเดียว
            AddHandler B.Click, AddressOf ClickButton
      Next
    End Subนี่คือคณิตศาสตร์ฉบับอนุบาลแมวเหมียวอีกล่ะ โดยการหาระยะในแนวนอนของปุ่มด้วยการหารเอาเศษ (Mod) ส่วนการหาระยะในแนวตั้งใช้การหารตัดเศษ \ ... อ่ะจึ๊ยยย ...

การสร้างเหตุการณ์ เมื่อเลือกคลิ๊กที่ปุ่ม (Button)
    '// Click Button event, get the text and tag of button.
    Public Sub ClickButton(ByVal sender As Object, ByVal e As System.EventArgs)
      Dim btn As Button = sender
      MessageBox.Show("คุณคลิ๊ก [" + btn.Text + "]" & vbCrLf & "Tag=" & btn.Tag & " จะเป็นค่า Primary Key")
    End Subคุณจะมีกี่ร้อยกี่พันปุ่ม มันก็มีแค่เหตุการณ์ในการคลิ๊กเพียงชุดเดียว

การสร้าง TabControl ตัวนี้แอดมินถือเป็นการตั้งโจทย์ ให้ไปสร้างเองตามจำนวนกลุ่มหรือประเภทสินค้าที่มี
    ' / -------------------------------------------------------------------
    ' / สร้าง TabControl
    Sub AddTabControl()
      Me.tabControl1 = New TabControl()
      Me.tabPage1 = New TabPage()
      Me.tabPage2 = New TabPage()
      With tabControl1
            .Controls.AddRange(New Control() {Me.tabPage1, Me.tabPage2})
            .Padding = New Point(6, 3)
            .Location = New Point(1, 1)
            .Size = New Size(500, 500)
            .Font = New Font("Tahoma", 10, FontStyle.Bold)
            '/ Selects tabPage1 using SelectedTab.
            .SelectedTab = tabPage1
            '/ หรือ Me.tabControl1.SelectTab(0)
      End With
      Me.tabPage1.Text = "Burger"
      Me.tabPage2.Text = "Beverage"
      Me.Controls.AddRange(New Control() {Me.tabControl1})
    End Sub
การสร้าง Panel
    ' / -------------------------------------------------------------------
    ' / สร้าง Panel เพื่อตีกรอบใส่ค่าปุ่ม (Button)
    Sub AddPanel()
      '// Create new Panel
      With pn
            .Location = New System.Drawing.Point(3, 6)
            .Size = New System.Drawing.Size(402, 402)
            .BackColor = Color.LemonChiffon
            .AutoScroll = True
      End With
    End SubConclusion: ก็ไม่รู้ว่าจะสรุปอะไรดีครับ เพราะแอดมินได้เรียงลำดับขั้นตอนวิธีการต่างๆเอาไว้เพื่อให้ได้ศึกษากัน ส่วนใครจะรับไปได้มากได้น้อย ก็คงขึ้นอยู่กับตัวทุกท่านเอง ... สวัสดี
ดาวน์โหลดโค้ดต้นฉบับแบบเต็ม VB.NET (2010) ได้ที่นี่

g2gsoftuser โพสต์ 2022-10-25 19:43:34

ขอบคุณครับ
หน้า: [1]
ดูในรูปแบบกติ: [VB.NET] แจกโค้ดการสร้าง TabControl, Panel และ Button Control แบบ Run Time โปรเจคทองก้อนเบอเกอร์แดนซ์