无线照明系统开发过程说明(四)

 

无线照明系统开发过程说明(四) 

 图形文件处理

考虑显示每一个灯的位置及变化,共四个方向及开关两个状态。共有2^4,共有十六种状态。

引入VS.NET的组件,继承PICTUREBOX, 然后再其基础上加入自定义属性。其中根据要求加入灯塔标题,灯地址,灯的输入状态,输出状态等,其代码如:

Imports System.ComponentModel

Imports System.IO

Imports System.Windows.Forms

Imports YeWuBill

 

 

Public Class TwoLed

    Inherits System.Windows.Forms.PictureBox        ‘必须的

 

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

 

    ''' <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   ’默认地址从1,其实是0

    <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>

    ''' 灯的输入字符,表示灯的输入状态0,1,...9,A,B,C,D,E,F,这些

    ''' </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 = 2     ‘最多是5个通道

    <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

其中NEW字段关键的,初始化图像的原始状态,另外还要设置图像是透明,Me.BackColor = Color.Transparent,保证图像显示时,以透明方案显示,不影响其他场地的图形显示。还有就是图像的拉伸模式也是很重要的,其中要根随着显示器分辨率的变化而变化。

这里还有几个设计要注意的事项:1变量初始化时最好要赋值;2.   增加<Browsable(True)> _属性控制显示方式。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值