Как поменять стиль (форму) Checkbox (Сделать его круглым, квадратным) - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Как поменять стиль(форму) Checkbox(Сделать его круглым, квадратным) и как поменять галочку к Примеру на крестик?

Решение задачи: «Как поменять стиль (форму) Checkbox (Сделать его круглым, квадратным)»

textual
Листинг программы
Imports System.ComponentModel
 
Public Class CheckBoxEx
    Inherits Control
    Event CheckedChanged(sender As Object, e As EventArgs)
    Private _checkedState As State = State.Unchecked
    Private _enterMouse As Boolean = False
 
    Enum State
        Unchecked = -1
        Checked = 0
    End Enum
 
    Sub New()
        SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.OptimizedDoubleBuffer Or ControlStyles.ResizeRedraw Or ControlStyles.SupportsTransparentBackColor Or ControlStyles.UserPaint, True)
    End Sub
 
    ''' <summary>
    ''' Получает или указывает состояние объекта.
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    <DefaultValue(State.Unchecked)> Public Property CheckState As State
        Get
            Return _checkedState
        End Get
        Set(value As State)
            _checkedState = value
            MyBase.Refresh()
            RaiseEvent CheckedChanged(Me, New EventArgs)
        End Set
    End Property
 
    Public Overrides Property Text As String
        Get
            Return MyBase.Text
        End Get
        Set(value As String)
            MyBase.Text = value
            MyBase.Refresh()
        End Set
    End Property
 
    Private Sub OnRedrawCheck(sender As Object, e As PaintEventArgs)
        With e.Graphics
            Dim gp As New Drawing2D.GraphicsPath
            Dim _radius As Integer = 8
            Dim _size As Integer = 16
            Dim _fillCheckBG As New Drawing2D.LinearGradientBrush(New Rectangle(2, 2, _size, _size), Color.WhiteSmoke, Color.FromArgb(230, 230, 230), 90)
            With gp
                .AddArc(New Rectangle(2, 2, _radius, _radius), 180, 90)
                .AddArc(New Rectangle(_size + 2 - _radius, 2, _radius, _radius), 270, 90)
                .AddArc(New Rectangle(_size + 2 - _radius, _size + 2 - _radius, _radius, _radius), 0, 90)
                .AddArc(New Rectangle(2, _size + 2 - _radius, _radius, _radius), 90, 90)
                .CloseFigure()
            End With
            .FillPath(_fillCheckBG, gp)
            If _enterMouse Then .DrawPath(Pens.SteelBlue, gp) Else .DrawPath(Pens.LightGray, gp)
            Select Case _checkedState
                Case State.Checked
                    .DrawLines(New Pen(Brushes.SteelBlue, 2), New Point() {New Point(6, 10), New Point((_size / 2) + 1, _size - 2), New Point(_size - 2, 5)})
            End Select
            .DrawString(Text, Font, New SolidBrush(ForeColor), 2 + _size + 2, 2 + (_size / 2) - TextRenderer.MeasureText(Text, Font).Height / 2)
        End With
    End Sub
 
    Private Sub CheckBoxEx_MouseClick(sender As Object, e As MouseEventArgs) Handles Me.MouseClick
        If e.Button = Windows.Forms.MouseButtons.Left Then
            If _checkedState = State.Checked Then
                _checkedState = State.Unchecked
            ElseIf _checkedState = State.Unchecked Then
                _checkedState = State.Checked
            End If
            MyBase.Refresh()
        End If
    End Sub
 
    Private Sub CheckBoxEx_MouseEnter(sender As Object, e As EventArgs) Handles Me.MouseEnter
        _enterMouse = True : MyBase.Refresh()
    End Sub
 
    Private Sub CheckBoxEx_MouseLeave(sender As Object, e As EventArgs) Handles Me.MouseLeave
        _enterMouse = False : MyBase.Refresh()
    End Sub
 
    Private Sub CheckBoxEx_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
        e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
        OnRedrawCheck(sender, e)
 
    End Sub
 
End Class

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.615 из 5
Похожие ответы