Изменение цвета индикатора лампы в графическом интерфейсе пользователя (Visual Studio 2019) - PullRequest
0 голосов
/ 09 ноября 2019

Я хотел бы изменить цвет внутри одного круглого индикатора в графическом интерфейсе пользователя, чтобы он отображал, когда действие завершено или когда оно не выполнено [«двухцветный зеленый / красный светодиод»]. Я просмотрел встроенные пресеты в панели инструментов, но не смог ничего найти.

Поэтому я был бы благодарен за любую помощь.

Successful Indication Failed Indication

Ответы [ 3 ]

1 голос
/ 10 ноября 2019

Я нашел этот код на форуме msdn.microsoft.com, который меняет цвет центра «точки» при нажатии кнопки RadioButton.

Private Sub RadioButton_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles RadioButton1.Paint, RadioButton2.Paint

     If DirectCast(sender, RadioButton).Checked Then
         e.Graphics.FillEllipse(Brushes.Red, New RectangleF(2.5, 4.7, 7.2, 7.2))
     End If

Поэтому мы включили его вмой код не совсем элегантный и явно есть место для улучшений, но он действительно работает.

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    If My.Computer.Network.Ping("192.168.0.1") Then
        RadioButton1.ForeColor = Color.Green
        RadioButton1.ForeColor = Color.Black
    Else
        RadioButton1.ForeColor = Color.Red
        RadioButton1.ForeColor = Color.Black
    End If
End Sub

Private Sub RadioButton_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles RadioButton1.Paint
    If My.Computer.Network.Ping("192.168.0.1") Then
        e.Graphics.FillEllipse(Brushes.Green, New RectangleF(2.5, 4.7, 7.2, 7.2))
    Else
        e.Graphics.FillEllipse(Brushes.Red, New RectangleF(2.5, 4.7, 7.2, 7.2))
    End If
End Sub

Пояснение : при нажатии кнопки «Тестировать сеть» он отсылаетсетевой пинг, и в зависимости от возврата «точка» Network RadioButton меняет цвет на зеленый или красный,

GUI With RadioButton and Button

1 голос
/ 09 ноября 2019

Управление светодиодом ON / OFF.

  1. Добавьте новый класс в ваш проект, назовите его, скажем, OnOffLed.vb, скопируйте приведенный ниже код и вставьте его в новый класс.
Imports System.Windows.Forms
Imports System.Drawing
Imports System.Drawing.Drawing2D

Public Class OnOffLed
    Inherits Panel

    Public Enum LedState
        [On]
        Off
    End Enum

    Sub New()
        SetStyle(ControlStyles.AllPaintingInWmPaint Or
                 ControlStyles.OptimizedDoubleBuffer Or
                 ControlStyles.ResizeRedraw Or
                 ControlStyles.UserPaint, True)
        UpdateStyles()
    End Sub

    Private _state As LedState = LedState.Off
    Public Property State As LedState
        Get
            Return _state
        End Get
        Set(value As LedState)
            _state = value
            Invalidate()
        End Set
    End Property

    Private _onText As String
    Public Property OnText As String
        Get
            Return _onText
        End Get
        Set(value As String)
            _onText = value
            Invalidate()
        End Set
    End Property

    Private _offText As String
    Public Property OffText As String
        Get
            Return _offText
        End Get
        Set(value As String)
            _offText = value
            Invalidate()
        End Set
    End Property

    Protected Overrides Sub OnPaint(e As PaintEventArgs)
        Dim rec As New Rectangle(2, 2, Height - 5, Height - 5)
        Dim recText As New Rectangle(Height + 2, 1, Width - (Height - 2), Height)

        Dim G As Graphics = e.Graphics

        G.SmoothingMode = SmoothingMode.AntiAlias

        G.Clear(Parent.BackColor)

        If _state = LedState.On Then
            Dim cb As New ColorBlend With {
                .Colors = {Color.Green, Color.DarkGreen, Color.Green},
                .Positions = {0, 0.5, 1}
            }
            Using lgb As New LinearGradientBrush(rec, Color.Empty, Color.Empty, 90.0F) With {.InterpolationColors = cb}
                G.FillEllipse(lgb, rec)
            End Using
        Else
            Dim cb As New ColorBlend With {
                .Colors = {Color.Red, Color.DarkRed, Color.Red},
                .Positions = {0, 0.5, 1}
            }
            Using lgb As New LinearGradientBrush(rec, Color.Empty, Color.Empty, 90.0F) With {.InterpolationColors = cb}
                G.FillEllipse(lgb, rec)
            End Using
        End If

        G.TextRenderingHint = Drawing.Text.TextRenderingHint.ClearTypeGridFit

        Using br As New SolidBrush(ForeColor)
            Using sf As New StringFormat With {.Alignment = StringAlignment.Near, .LineAlignment = StringAlignment.Center}
                G.DrawString(If(_state = LedState.On, _onText, _offText), Font, br, recText, sf)
            End Using
        End Using
    End Sub

End Class

Перестройте свой проект.

В панели инструментов на вкладке компонента вашего проекта вы найдете новый элемент управления. OnOffLed. Перетащите его в форму, как и любой другой элемент управления.

Вы можете переключать состояние через свойство State, устанавливать другой текст, если вам это нужно для каждого состояния, через OnText и OffText свойства.

Пример использования:

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    If My.Computer.Network.Ping("192.168.2.01") Then
        OnOffLed1.State = OnOffLed.LedState.On
    Else
        OnOffLed1.State = OnOffLed.LedState.Off
    End If
End Sub

enter image description here

Удачи.

0 голосов
/ 11 ноября 2019

Другой простой способ - использовать определенный символ '●'.

' Set size
Label1.Font = New Font("Microsoft Sans Serif", 20)
Label1.Text = "●"
' Set color
Label1.ForeColor = Color.Green

enter image description here

Надеюсь, это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...