PublicClass BaseClassClass BaseClass Private mName AsString="默认" Private mStatus As DevStatus = DevStatus.Default PrivatemIdAs Guid = Guid.NewGuid PublicEvent NameChanged(ByVal NewName AsString) PublicEvent StatusChanged(ByVal NewStatus As DevStatus) PublicEnum DevStatusEnum DevStatus [Default] =0 Normal =1 Warn =2 [Error] =3 Unknown =4 End Enum Property Name()Property Name() AsString Get ReturnMe.mName EndGet Set(ByVal value AsString) IfNot value.Equals(Me.mName) Then Me.mName = value RaiseEvent NameChanged(value) EndIf EndSet End Property Property Status()Property Status() As DevStatus Get ReturnMe.mStatus EndGet Set(ByVal value As DevStatus) IfNot value.Equals(Me.Status) Then Me.mStatus = value RaiseEvent StatusChanged(value) EndIf EndSet End Property Property ID()Property ID() As Guid Get ReturnMe.mId EndGet Set(ByVal value As Guid) Me.mId = value EndSet End Property End Class
(2) Otd Code:
PublicClass OtdClass Otd Inherits BaseClass Private mPower AsInteger Property Power()Property Power() AsInteger Get ReturnMe.mPower EndGet Set(ByVal value AsInteger) Me.mPower = value EndSet End Property Sub New()SubNew() MyBase.New() Me.Name ="光发送机" End Sub End Class
(3) Upor Code :
PublicClass UporClass Upor Inherits BaseClass Private mCurrent AsInteger Property Current()Property Current() AsInteger Get ReturnMe.mCurrent EndGet Set(ByVal value AsInteger) Me.mCurrent = value EndSet End Property Sub New()SubNew() MyBase.new() Me.Name ="光接收机" End Sub End Class
(4) MyPic Code :
PublicClass MyPicClass MyPic Inherits PictureBox Private MouseDownPoint As Point Private mMeSelect AsBoolean PublicWithEvents Device As BaseClass PublicEvent PicClick(ByVal Device As BaseClass) PublicProperty MeSelect()Property MeSelect() AsBoolean Get ReturnMe.mMeSelect EndGet Set(ByVal value AsBoolean) Me.mMeSelect = value If value Then Me.BorderStyle = Windows.Forms.BorderStyle.Fixed3D Else Me.BorderStyle = Windows.Forms.BorderStyle.FixedSingle EndIf EndSet End Property Sub New()SubNew(ByVal ThisDevice As BaseClass) MyBase.New() Me.BorderStyle = Windows.Forms.BorderStyle.FixedSingle Me.Device = ThisDevice End Sub PrivateSub mDevice_StatusChanged()Sub mDevice_StatusChanged(ByVal NewStatus As BaseClass.DevStatus) Handles Device.StatusChanged SelectCase 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 EndSelect End Sub PrivateSub MyPic_Click()Sub MyPic_Click(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMe.Click RaiseEvent PicClick(Me.Device) End Sub PrivateSub MyPic_MouseDown()Sub MyPic_MouseDown(ByVal sender AsObject, ByVal e As System.Windows.Forms.MouseEventArgs) HandlesMe.MouseDown If e.Button = Windows.Forms.MouseButtons.Left Then Me.Cursor = Cursors.Hand MouseDownPoint =New Point(e.X, e.Y) EndIf End Sub PrivateSub MyPic_MouseMove()Sub MyPic_MouseMove(ByVal sender AsObject, ByVal e As System.Windows.Forms.MouseEventArgs) HandlesMe.MouseMove If e.Button = Windows.Forms.MouseButtons.Left Then Dim dx AsInteger= e.X - MouseDownPoint.X Dim dy AsInteger= e.Y - MouseDownPoint.Y Me.Location =New Point(Me.Left + dx, Me.Top + dy) EndIf End Sub PrivateSub MyPic_MouseUp()Sub MyPic_MouseUp(ByVal sender AsObject, ByVal e As System.Windows.Forms.MouseEventArgs) HandlesMe.MouseUp Me.Cursor = Cursors.Arrow End Sub End Class
(5) MyNode Code :
PublicClass MyNodeClass MyNode Inherits TreeNode PublicWithEvents Device As BaseClass Sub New()SubNew(ByVal ThisDevice As BaseClass) MyBase.New() Me.Device = ThisDevice Me.Text =Me.Device.Name End Sub PrivateSub mDevice_NameChanged()Sub mDevice_NameChanged(ByVal NewName AsString) Handles Device.NameChanged Me.Text = NewName End Sub PrivateSub mDevice_StatusChanged()Sub mDevice_StatusChanged(ByVal NewStatus As BaseClass.DevStatus) Handles Device.StatusChanged SelectCase 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 EndSelect End Sub End Class
(6) Form Code :
PublicClass Form1Class Form1 PrivateSub NewOtdToolStripMenuItem1_Click()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 PrivateSub NewUporToolStripMenuItem1_Click()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 PrivateSub NewOtdToolStripMenuItem_Click()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 PrivateSub NewUporToolStripMenuItem_Click()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 PrivateFunction AddNodeCtrl()Function AddNodeCtrl(ByVal Cls As BaseClass) As MyNode Dim NodeCtrl AsNew MyNode(Cls) TreeView1.Nodes.Add(NodeCtrl) Return NodeCtrl End Function PrivateFunction AddPicCtrl()Function AddPicCtrl(ByVal Cls As BaseClass) As MyPic Dim PicCtrl AsNew MyPic(Cls) AddHandler PicCtrl.PicClick, AddressOfMe.PicClick Panel1.Controls.Add(PicCtrl) Return PicCtrl End Function PrivateSub PicClick()Sub PicClick(ByVal Device As BaseClass) Me.PropertyGrid1.SelectedObject = Device ForEach Pic As MyPic In Panel1.Controls Pic.MeSelect = Pic.Device.ID.Equals(Device.ID) Next ForEach node As MyNode In TreeView1.Nodes If node.Device.ID.Equals(Device.ID) Then TreeView1.SelectedNode = node ExitFor EndIf Next End Sub PrivateSub TreeView1_NodeMouseClick()Sub TreeView1_NodeMouseClick(ByVal sender AsObject, ByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick Me.PropertyGrid1.SelectedObject =CType(e.Node, MyNode).Device ForEach Pic As MyPic In Panel1.Controls Pic.MeSelect = Pic.Device.ID.Equals(CType(e.Node, MyNode).Device.ID) Next End Sub End Class