Chattu Pal Ответов: 2

управление полосой состояния в vb.net


Как показывает время, дату, индикатор NumLock CapsLock и состояния в строке состояния в vb.net 2008?

2 Ответов

Рейтинг:
2

DaveAuld

Смотрите демо-версию ниже,чтобы начать работу. Вы никогда не говорили, какую версию dot net вы используете, смотрите событие tick для получения информации о .Net 3.5 и выше

Public Class Form1

    Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer

    Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load

        'Create a StatusBar
        Dim statusBarMain As New StatusBar

        statusBarMain.Name = "StatusBar"
        statusBarMain.ShowPanels = True

        'Create the panels
        Dim statusBarDate = New StatusBarPanel
        statusBarDate.Name = "StatusBarDate"
        statusBarDate.Text = FormatDateTime(Now(), DateFormat.ShortDate)
        statusBarDate.AutoSize = StatusBarPanelAutoSize.Contents
        statusBarMain.Panels.Add(statusBarDate)

        Dim statusBarTime = New StatusBarPanel
        statusBarTime.Name = "StatusBarTime"
        statusBarTime.Text = FormatDateTime(Now(), DateFormat.LongTime)
        statusBarTime.AutoSize = StatusBarPanelAutoSize.Contents
        statusBarMain.Panels.Add(statusBarTime)

        Dim statusBarCAPS = New StatusBarPanel
        statusBarCAPS.Name = "StatusBarCAPS"

        If GetKeyState(Keys.CapsLock) = 1 Then
            statusBarCAPS.Text = "CAPS ON"
        Else
            statusBarCAPS.Text = "CAPS OFF"
        End If

        statusBarCAPS.AutoSize = StatusBarPanelAutoSize.Contents
        statusBarMain.Panels.Add(statusBarCAPS)

        Dim statusBarNUMS = New StatusBarPanel
        statusBarNUMS.Name = "StatusBarNUMS"

        If GetKeyState(Keys.NumLock) = 1 Then
            statusBarNUMS.Text = "NumLock ON"
        Else
            statusBarNUMS.Text = "NumLock OFF"
        End If

        statusBarNUMS.AutoSize = StatusBarPanelAutoSize.Contents
        statusBarMain.Panels.Add(statusBarNUMS)

        'Add all teh controls to the form
        Me.Controls.Add(statusBarMain)

        'Set up a refresh timer
        Dim timer As New Timer
        timer.Interval = 1000
        timer.Start()
        AddHandler timer.Tick, AddressOf timer_Tick


    End Sub

        Private Sub timer_Tick()

        Dim status As StatusBar = CType(Me.Controls.Find("statusBar", True)(0), StatusBar)

        status.Panels("statusBarDate").Text = FormatDateTime(Now(), DateFormat.ShortDate)
        status.Panels("statusBarTime").Text = FormatDateTime(Now(), DateFormat.LongTime)

        'Rather than set up message listeners etc, are you really going to notice much if the caps lock/nums lock is
        'upto 1 seconds out from true state?? doubt it much. (you decrease the timer tick of course.
        If GetKeyState(Keys.NumLock) = 1 Then
            status.Panels("statusBarNUMS").Text = "NumLock ON"
        Else
            status.Panels("statusBarNUMS").Text = "NumLock OFF"
        End If

        If GetKeyState(Keys.CapsLock) = 1 Then
            status.Panels("statusBarCAPS").Text = "CAPS ON"
        Else
            status.Panels("statusBarCAPS").Text = "CAPS OFF"
        End If

        'NOTE: IN .Net Version 3.5 and above you can use the;
        '        My.Computer.Keyboard.CapsLock
        '        My.Computer.Keyboard.NumLock
        ' to read the status without an unmanaged call

        End Sub
End Class


Рейтинг:
1

Slacker007

Создайте отдельные элементы полосы состояния, а затем назначьте этим элементам текст и значения с помощью кода.