[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) ได้ที่นี่
ขอบคุณครับ
หน้า:
[1]