關於類的繼承測試程序

本程序運行需要在窗體上添加一個TreeView、一個Panel、一個PropertyGrid控件。

在TreeView、Panel控件上使用右鍵可爲其添加子控件。

程序主要爲了測試類的特性,同時也有運行時動態改變控件位置的實現方法,對於不同控件屬性保持一致動態添加的控件添加事件等功能實現兼而有之,值得初學者一看。

 

主要源碼:

(1) BaseClass Code:

Public Class BaseClass

    
Private mName As String = "默認"
    
Private mStatus As DevStatus = DevStatus.Default
    
Private mId As Guid = Guid.NewGuid

    
Public Event NameChanged(ByVal NewName As String)
    
Public Event StatusChanged(ByVal NewStatus As DevStatus)

    
Public Enum DevStatus
        [
Default= 0
        Normal 
= 1
        Warn 
= 2
        [
Error= 3
        Unknown 
= 4
    
End Enum


    
Property Name() As String
        
Get
            
Return Me.mName
        
End Get
        
Set(ByVal value As String)
            
If Not value.Equals(Me.mName) Then
                
Me.mName = value
                
RaiseEvent NameChanged(value)
            
End If
        
End Set
    
End Property


    
Property Status() As DevStatus
        
Get
            
Return Me.mStatus
        
End Get
        
Set(ByVal value As DevStatus)
            
If Not value.Equals(Me.Status) Then
                
Me.mStatus = value
                
RaiseEvent StatusChanged(value)
            
End If
        
End Set
    
End Property


    
Property ID() As Guid
        
Get
            
Return Me.mId
        
End Get
        
Set(ByVal value As Guid)
            
Me.mId = value
        
End Set
    
End Property

End Class

(2) Otd Code:

Public Class Otd
    
Inherits BaseClass

    
Private mPower As Integer

    
Property Power() As Integer
        
Get
            
Return Me.mPower
        
End Get
        
Set(ByVal value As Integer)
            
Me.mPower = value
        
End Set
    
End Property


    
Sub New()
        
MyBase.New()
        
Me.Name = "光發送機"
    
End Sub

End Class

(3) Upor Code :

Public Class Upor
    
Inherits BaseClass

    
Private mCurrent As Integer

    
Property Current() As Integer
        
Get
            
Return Me.mCurrent
        
End Get
        
Set(ByVal value As Integer)
            
Me.mCurrent = value
        
End Set
    
End Property


    
Sub New()
        
MyBase.new()
        
Me.Name = "光接收機"
    
End Sub


End Class

(4) MyPic Code :

Public Class MyPic
    
Inherits PictureBox

    
Private MouseDownPoint As Point
    
Private mMeSelect As Boolean

    
Public WithEvents Device As BaseClass
    
Public Event PicClick(ByVal Device As BaseClass)

    
Public Property MeSelect() As Boolean
        
Get
            
Return Me.mMeSelect
        
End Get
        
Set(ByVal value As Boolean)
            
Me.mMeSelect = value
            
If value Then
                
Me.BorderStyle = Windows.Forms.BorderStyle.Fixed3D
            
Else
                
Me.BorderStyle = Windows.Forms.BorderStyle.FixedSingle
            
End If
        
End Set
    
End Property


    
Sub New(ByVal ThisDevice As BaseClass)
        
MyBase.New()
        
Me.BorderStyle = Windows.Forms.BorderStyle.FixedSingle
        
Me.Device = ThisDevice
    
End Sub


    
Private Sub mDevice_StatusChanged(ByVal NewStatus As BaseClass.DevStatus) Handles Device.StatusChanged
        
Select Case NewStatus
            
Case BaseClass.DevStatus.Default : Me.BackColor = Color.Transparent
            
Case BaseClass.DevStatus.Error : Me.BackColor = Color.Red
            
Case BaseClass.DevStatus.Normal : Me.BackColor = Color.LightGreen
            
Case BaseClass.DevStatus.Unknown : Me.BackColor = Color.Blue
            
Case BaseClass.DevStatus.Warn : Me.BackColor = Color.Yellow
        
End Select
    
End Sub


    
Private Sub MyPic_Click(ByVal sender As ObjectByVal e As System.EventArgs) Handles Me.Click
        
RaiseEvent PicClick(Me.Device)
    
End Sub


    
Private Sub MyPic_MouseDown(ByVal sender As ObjectByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
        
If e.Button = Windows.Forms.MouseButtons.Left Then
            
Me.Cursor = Cursors.Hand
            MouseDownPoint 
= New Point(e.X, e.Y)
        
End If
    
End Sub


    
Private Sub MyPic_MouseMove(ByVal sender As ObjectByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
        
If e.Button = Windows.Forms.MouseButtons.Left Then
            
Dim dx As Integer = e.X - MouseDownPoint.X
            
Dim dy As Integer = e.Y - MouseDownPoint.Y

            
Me.Location = New Point(Me.Left + dx, Me.Top + dy)
        
End If
    
End Sub


    
Private Sub MyPic_MouseUp(ByVal sender As ObjectByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
        
Me.Cursor = Cursors.Arrow
    
End Sub

End Class

(5) MyNode Code :

Public Class MyNode
    
Inherits TreeNode

    
Public WithEvents Device As BaseClass

    
Sub New(ByVal ThisDevice As BaseClass)
        
MyBase.New()
        
Me.Device = ThisDevice
        
Me.Text = Me.Device.Name
    
End Sub


    
Private Sub mDevice_NameChanged(ByVal NewName As StringHandles Device.NameChanged
        
Me.Text = NewName
    
End Sub


    
Private Sub mDevice_StatusChanged(ByVal NewStatus As BaseClass.DevStatus) Handles Device.StatusChanged
        
Select Case NewStatus
            
Case BaseClass.DevStatus.Default : Me.ForeColor = Color.Black
            
Case BaseClass.DevStatus.Error : Me.ForeColor = Color.Red
            
Case BaseClass.DevStatus.Normal : Me.ForeColor = Color.LightGreen
            
Case BaseClass.DevStatus.Unknown : Me.ForeColor = Color.Blue
            
Case BaseClass.DevStatus.Warn : Me.ForeColor = Color.Yellow
        
End Select
    
End Sub

End Class

(6) Form Code :

Public Class Form1

    
Private Sub NewOtdToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NewOtdToolStripMenuItem1.Click
        AddPicCtrl(
New Otd).Device = AddNodeCtrl(New Otd).Device
    
End Sub


    
Private Sub NewUporToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NewUporToolStripMenuItem1.Click
        AddPicCtrl(
New Upor).Device = AddNodeCtrl(New Upor).Device
    
End Sub


    
Private Sub NewOtdToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NewOtdToolStripMenuItem.Click
        AddNodeCtrl(
New Otd).Device = AddPicCtrl(New Otd).Device
    
End Sub


    
Private Sub NewUporToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NewUporToolStripMenuItem.Click
        AddPicCtrl(
New Upor).Device = AddNodeCtrl(New Upor).Device
    
End Sub


    
Private Function AddNodeCtrl(ByVal Cls As BaseClass) As MyNode
        
Dim NodeCtrl As New MyNode(Cls)
        TreeView1.Nodes.Add(NodeCtrl)
        
Return NodeCtrl
    
End Function


    
Private Function AddPicCtrl(ByVal Cls As BaseClass) As MyPic
        
Dim PicCtrl As New MyPic(Cls)
        
AddHandler PicCtrl.PicClick, AddressOf Me.PicClick
        Panel1.Controls.Add(PicCtrl)
        
Return PicCtrl
    
End Function


    
Private Sub PicClick(ByVal Device As BaseClass)
        
Me.PropertyGrid1.SelectedObject = Device

        
For Each Pic As MyPic In Panel1.Controls
            Pic.MeSelect 
= Pic.Device.ID.Equals(Device.ID)
        
Next
        
For Each node As MyNode In TreeView1.Nodes
            
If node.Device.ID.Equals(Device.ID) Then
                TreeView1.SelectedNode 
= node
                
Exit For
            
End If
        
Next
    
End Sub


    
Private Sub TreeView1_NodeMouseClick(ByVal sender As ObjectByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick
        
Me.PropertyGrid1.SelectedObject = CType(e.Node, MyNode).Device
        
For Each Pic As MyPic In Panel1.Controls
            Pic.MeSelect 
= Pic.Device.ID.Equals(CType(e.Node, MyNode).Device.ID)
        
Next
    
End Sub

End Class

發佈了38 篇原創文章 · 獲贊 4 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章