VB.NET自定义组件方法及注意事项

Imports System.ComponentModel
Imports System.IO
Imports System.Windows.Forms
Imports YeWuBill


Public Class TwoLed
    Inherits System.Windows.Forms.PictureBox

    '切记 属性必须对其赋值,否则导致系统崩溃。

    Public Enum TwoLedState
        None_Led = 0              'XF
        Right_Led = 1             'XB
        Mid_Led = 2               'XD
        Mid_Right_Led = 3         'X9
        Left_Led = 4              'XE
        Left_Right_Led = 5        'XA
        Left_Mid_Led = 6          'XC
        Left_Mid_Right_Led = 7    'X8
        Bad_Led = 8               '坏了
    End Enum

    Dim AddStated As Boolean
    Dim SaveStated As Boolean

    ''' <summary>
    ''' 灯塔号
    ''' </summary>
    ''' <remarks></remarks>

    Private mvarTitle As String = "1#灯塔"
    <Browsable(True)> _
    Public Property Title() As String
        Get
            Return mvarTitle
        End Get
        Set(ByVal value As String)
            mvarTitle = value
            Me.Invalidate()
        End Set
    End Property

    ''' <summary>
    ''' 灯塔地址
    ''' </summary>
    ''' <remarks></remarks>
    Private mvarAddress As Integer = 1
    <Browsable(True)> _
    Public Property Address() As Integer
        Get
            Return mvarAddress
        End Get
        Set(ByVal value As Integer)
            mvarAddress = value
            Me.Invalidate()
        End Set
    End Property

    ''' <summary>
    ''' 启动状态
    ''' </summary>
    ''' <remarks></remarks>
    Private mvarStartState = True
    Public Property StartState() As Boolean
        Get
            Return mvarStartState
        End Get
        Set(ByVal value As Boolean)
            mvarStartState = value
            Me.Invalidate()
        End Set
    End Property

    ''' <summary>
    ''' 灯的输入字符,表示灯的输入状态
    ''' </summary>
    ''' <remarks></remarks>
    Private mvarIOin As String = "0F"
    <Browsable(True)> _
    Public Property IOin() As String
        Get
            Return mvarIOin
        End Get
        Set(ByVal value As String)
            mvarIOin = value
        End Set
    End Property

    ''' <summary>
    ''' 灯的输出字符,表示灯的输出状态
    ''' </summary>
    ''' <remarks></remarks>
    Private mvarIOout As String = "00"
    <Browsable(True)> _
    Public Property IOout() As String
        Get
            Return mvarIOout
        End Get
        Set(ByVal value As String)
            mvarIOout = value
        End Set
    End Property

    ''' <summary>
    ''' 灯的通道数量
    ''' </summary>
    ''' <remarks></remarks>
    Private mavChannelNum As Integer = 3
    <Browsable(True)> _
    Public Property ChannelNum() As Integer
        Get
            Return mavChannelNum
        End Get
        Set(ByVal value As Integer)
            mavChannelNum = value
            Me.Invalidate()
        End Set

    End Property

    ''' <summary>
    ''' 灯塔值
    ''' </summary>
    ''' <remarks></remarks>
    Private mvarValue As TwoLedState = TwoLedState.None_Led
    Public Property LedValue() As TwoLedState
        Get
            Return mvarValue
        End Get
        Set(ByVal mValue As TwoLedState)
            mvarValue = mValue
            If mValue = 0 Then
                Me.Image = My.Resources._0_0_0  'XF
            ElseIf mValue = 1 Then
                Me.Image = My.Resources._0_0_1  'XB
            ElseIf mValue = 2 Then
                Me.Image = My.Resources._0_1_0  'XD
            ElseIf mValue = 3 Then
                Me.Image = My.Resources._0_1_1  'X9
            ElseIf mValue = 4 Then
                Me.Image = My.Resources._1_0_0  'XE
            ElseIf mValue = 5 Then
                Me.Image = My.Resources._1_0_1  'XA
            ElseIf mValue = 6 Then
                Me.Image = My.Resources._1_1_0  'XC
            ElseIf mValue = 7 Then
                Me.Image = My.Resources._1_1_1  'X08
            ElseIf mValue = 8 Then
                Me.Image = My.Resources.x_x_x
            End If
            If mValue <> TwoLedState.None_Led And Not AddStated Then
                AddData()
                AddStated = True
                SaveStated = False
            End If
            If mValue = TwoLedState.None_Led And Not SaveStated And AddStated Then
                SaveData()
                SaveStated = True
                AddStated = False
            End If
            Me.Invalidate()
        End Set
    End Property

    '添加提示信息
    Private Sub TwoLed_MouseHover(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MouseHover
        Dim mTooltip As New ToolTip
        If mvarAddress > 0 Then
            mTooltip.SetToolTip(Me, "标题:" & mvarTitle.ToString & "通道号:" & mavChannelNum.ToString)
        End If
    End Sub

    'Private Sub TwoLed_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDoubleClick
    '    If Me.Enabled Then
    '        Dim frm As New FrmLedKZ
    '        ' frm.Text = "地址:" & Me.Address ' mvarAddress
    '        frm.TwoLed1 = Me            'me的引用最为关键呀
    '        frm.Text = Address
    '        frm.ShowDialog()
    '    Else
    '        MsgBox("系统无电或信号不正常!,请检查")
    '    End If
    'End Sub


    Private Sub MyPic_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        Me.SizeMode = PictureBoxSizeMode.StretchImage
    End Sub


   
    Public Sub New()

        ' 此调用是 Windows 窗体设计器所必需的。
        InitializeComponent()
        Me.Image = My.Resources._0_0_0

         '此处为透明背景
        Me.BackColor = Color.Transparent
        ' 在 InitializeComponent() 调用之后添加任何初始化。

    End Sub

    Private Sub AddData()

        Dim Myfun As New ClsTbLedOpenTime
        If Myfun.ExistBy(Me.Title, 1) Then
            Myfun.ModifyOpenLedTime(Me.Title, 1)
        Else
            Myfun.AddOpenLedTime(Me.Title, 1)
        End If

        Myfun = Nothing
    End Sub


    Private Sub SaveData()
        Dim Mydata As New tbLedTimed
        Dim Myfun1 As New ClsTbLedOpenTime
        Dim Myfun As New ClsTbLedTimed
        Dim TmpDate1 As Date

        TmpDate1 = Myfun1.ReadLedOpenTime(Me.Title)

        Mydata.灯名称 = Me.Title
        Mydata.关灯时间 = Now
        Mydata.开灯时间 = TmpDate1
        Mydata.合计时间 = DateDiff(DateInterval.Minute, TmpDate1, Now)

        Myfun.AddOpenLedTime(Mydata)

    End Sub

End Class

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值