ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 3552|ตอบกลับ: 1

[VB.NET] การสร้าง User Control แบบพื้นฐานขึ้นมาใช้งานเอง

[คัดลอกลิงก์]

320

กระทู้

512

โพสต์

6583

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
6583



การสร้าง User Control ก็คือการนำ Control ต่างๆที่อยู่ในกลุ่มของเครื่องมือ (ToolBox) เพื่อนำมาสร้างเป็น Control ตัวใหม่ขึ้นมาใช้งานโดยเฉพาะ ตัวอย่างนี้เป็นการสร้างปุ่มคำสั่ง เพื่อให้แสดงผลรายชื่อสินค้า ราคา และภาพประกอบ ... โค้ดตัวอย่างประกอบนี้จะใช้งานในแบบไดนามิค คือต้องสั่งรันโปรแกรมให้ทำงานถึงจะเห็นผล (Run Time) เพื่อให้เกิดความยืดหยุ่น และมีประสิทธิภาพ ...

ทฤษฎี:
ใน VB.NET คำว่า Get และ Set เกี่ยวข้องกับคุณสมบัติ (Properties) ในคลาส คุณสมบัติใน VB.NET ใช้ในการห่อหุ้มข้อมูลและให้การเข้าถึงฟิลด์ของคลาสอย่างควบคุมได้ โดยมันจะช่วยให้คุณกำหนดวิธีการอ่านและแก้ไขข้อมูลในคลาสได้ ...

การประกาศคุณสมบัติ (Property Declaration):
คุณสมบัติจะถูกประกาศภายในคลาสโดยใช้คำว่า Property ซึ่งสามารถมีตัวเข้าถึง Get และ/หรือ Set

ตัวเข้าถึง Get (Get Accessor):
ตัวเข้าถึง Get ใช้เพื่อดึงค่าของคุณสมบัติ มันคล้ายกับเมธอดที่ส่งค่ากลับ

ตัวเข้าถึง Set (Set Accessor):
ตัวเข้าถึง Set ใช้เพื่อกำหนดค่าให้กับคุณสมบัติ มันคล้ายกับเมธอดที่รับพารามิเตอร์ ค่าที่จะกำหนดจะถูกส่งผ่านไปยังตัวเข้าถึง Set โดยใช้พารามิเตอร์ Value

อ่านแล้วงงมั้ยครับ ... หากจะให้อธิบายง่ายๆก็คือ การกำหนดคุณสมบัติ (Properties) ให้กับตัว Control เองนั่นแหละ ... ต้องดูจากคลิปวิดีโอแล้วคุณจะร้องอ๋อ

คลิปวิดีโอ Visual Basic .NET (2010) กับการสร้าง User Control แบบพื้นฐาน ...

โค้ดในส่วนของการกำหนดคุณสมบัติ (Properties) ให้กับ Control ...
  1. Public Class Widget
  2.     '// เพิ่ม Properties สำหรับตั้งค่ารายการต่างๆ
  3.     Public Property WidgetName As String
  4.         Get
  5.             Return lblWidgetName.Text
  6.         End Get
  7.         Set(value As String)
  8.             lblWidgetName.Text = value
  9.         End Set
  10.     End Property

  11.     Public Property WidgetPrice As String
  12.         Get
  13.             Return lblWidgetPrice.Text
  14.         End Get
  15.         Set(value As String)
  16.             lblWidgetPrice.Text = value
  17.         End Set
  18.     End Property

  19.     Public Property WidgetPriceForeColor As Color
  20.         Get
  21.             Return lblWidgetPrice.ForeColor
  22.         End Get
  23.         Set(value As Color)
  24.             lblWidgetPrice.ForeColor = value
  25.         End Set
  26.     End Property

  27.     Public Property WidgetImage As Image
  28.         Get
  29.             Return picWidget.Image
  30.         End Get
  31.         Set(value As Image)
  32.             picWidget.Image = value
  33.         End Set
  34.     End Property

  35. End Class
คัดลอกไปที่คลิปบอร์ด

โค้ดในการนำ User Control เข้ามาใช้งานบนฟอร์ม ...
  1. Public Class frmTest

  2.     Private Sub frmTest_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  3.         '// ข้อมูลรายการสินค้า
  4.         Dim products As List(Of Tuple(Of String, Decimal, String)) = New List(Of Tuple(Of String, Decimal, String)) From {
  5.             Tuple.Create("Burger Chicken", 99D, "BurgerChicken.png"),
  6.             Tuple.Create("Burger Fish", 75D, "BurgerFish.png"),
  7.             Tuple.Create("Burger Spicy Shrimp", 85D, "BurgerSpicyShrimp.png"),
  8.             Tuple.Create("Burger Tex Supreme", 60D, "BurgerTexSupreme.png"),
  9.             Tuple.Create("Burger Lemon Shrimp", 45D, "BurgerLemonShrimp.png"),
  10.             Tuple.Create("โค้กกระป๋อง", 20D, "cokecan.png"),
  11.             Tuple.Create("7Up กระป๋อง", 20D, "7upcan.png"),
  12.             Tuple.Create("เป็บซี่กระป๋อง", 20D, "pepsican.png")
  13.         }
  14.         '// สร้าง Panel ใหม่
  15.         Dim Panel1 As New Panel()
  16.         '// กำหนดขนาดของ Panel
  17.         Panel1.Size = New Size(290, 440)
  18.         '// กำหนดตำแหน่งของ Panel
  19.         Panel1.Location = New Point(0, 0)
  20.         '// เปิดใช้งาน ScrollBars อัตโนมัติ
  21.         Panel1.AutoScroll = True
  22.         '// เพิ่ม Panel ลงในฟอร์ม
  23.         Me.Controls.Add(Panel1)

  24.         '// วางรายการสินค้าแต่ละรายการบนฟอร์ม (อยู่ภายใน Panel1)
  25.         For iCol As Integer = 0 To products.Count - 1
  26.             Dim product As Tuple(Of String, Decimal, String) = products(iCol)
  27.             '// Instance Name ของ UserControl (ProductControl)
  28.             Dim widget As New Widget
  29.             Dim ImagePath As String = MyPath(Application.StartupPath & "Picture")
  30.             '// ตั้งค่ารายการสินค้าตามข้อมูลตัวอย่าง.
  31.             With widget
  32.                 .WidgetName = product.Item1
  33.                 .WidgetPrice = product.Item2.ToString("C2")
  34.                 .WidgetImage = Image.FromFile(ImagePath & product.Item3)
  35.             End With
  36.             '// ตั้งค่าตำแหน่งของ UserControl
  37.             widget.Location = New Point(2, widget.Height * iCol)
  38.             widget.Size = New Size(271, 74)
  39.             '// การหารเอาเศษ ผลลัพธ์ 0 คือเลขคู่ ผลลัพธ์ 1 คือเลขคี่
  40.             If iCol Mod 2 = 0 Then
  41.                 '// เปลี่ยนสีพื้นหลัง
  42.                 widget.BackColor = Color.DarkOrange
  43.                 '// เปลี่ยนสีฟอนต์ (ForeColor)
  44.                 widget.WidgetPriceForeColor = Color.Yellow
  45.             Else
  46.                 widget.BackColor = Color.YellowGreen
  47.                 widget.WidgetPriceForeColor = Color.White
  48.             End If
  49.             '// เพิ่ม User Control ลงไปใน Panel1
  50.             Panel1.Controls.Add(widget)

  51.             '// Add click event handler.
  52.             AddHandler widget.Click, AddressOf Widget_Click
  53.             AddHandler widget.lblWidgetName.Click, AddressOf Widget_Click
  54.             AddHandler widget.lblWidgetPrice.Click, AddressOf Widget_Click
  55.             AddHandler widget.picWidget.Click, AddressOf Widget_Click
  56.         Next
  57.     End Sub

  58.     '// เหตุการณ์ของการกดคลิ๊กเมาส์บน UserControl
  59.     Private Sub Widget_Click(sender As Object, e As EventArgs)
  60.         '// กรณีการคลิ๊กในฟอร์มของ UserControl
  61.         If TypeOf sender Is Widget Then
  62.             Dim ClickedWidget As Widget = CType(sender, Widget)
  63.             MessageBox.Show("Product: " & ClickedWidget.WidgetName & vbCrLf & "Price: " & ClickedWidget.WidgetPrice)

  64.             '// กรณีการคลิ๊กที่ Label และ PictureBox.
  65.         ElseIf TypeOf sender Is Label Or TypeOf sender Is PictureBox Then
  66.             Dim ClickedWidget As Control = CType(sender, Control)
  67.             Dim ParentControl As Widget = CType(ClickedWidget.Parent, Widget)
  68.             MessageBox.Show("Product: " & ParentControl.WidgetName & vbCrLf & "Price: " & ParentControl.WidgetPrice)
  69.         End If
  70.     End Sub

  71. #Region "FUNCTION"
  72.     Function MyPath(ByVal AppPath As String) As String
  73.         '/ Return Value
  74.         MyPath = AppPath.ToLower.Replace("\bin\debug", "").Replace("\bin\release", "").Replace("\bin\x86\debug", "").Replace("\bin\x86\release", "")
  75.         '// If not found folder then put the \ (BackSlash) at the end.
  76.         If Microsoft.VisualBasic.Right(MyPath, 1) <> Chr(92) Then MyPath = MyPath & Chr(92)
  77.     End Function
  78. #End Region
  79. End Class
คัดลอกไปที่คลิปบอร์ด

ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2010) ได้ที่นี่ ...

ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

0

กระทู้

6

โพสต์

144

เครดิต

Member

Rank: 2

เครดิต
144
โพสต์ 2024-6-26 10:09:46 | ดูโพสต์ทั้งหมด

ขอบคุณครับ
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2024-11-27 19:26 , Processed in 0.295016 second(s), 5 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้