Przycisk przełącznika sterowania


Czy mogę zamienić przyciski sterujące, aby przełączyć przyciski?
Czy istnieje łatwy sposób zmiany właściwości przycisku, aby stał się przyciskiem przełączania?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Według

ten post
http://www.osix.net/modules/article/?id=797
na OSIX wszystko, co musisz zrobić, to użyć
CheckBox
, ale ustawić jego wygląd na
Button
.
W kodzie:
CheckBox checkBox1 = new System.Windows.Forms.CheckBox();
checkBox1.Appearance = System.Windows.Forms.Appearance.Button;

(Kod C #, ale możesz zobaczyć, jak to działa).
Ale możesz to zrobić z okna dialogowego właściwości w konstruktorze.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli dobrze zrozumiałem, możesz osiągnąć tę funkcjonalność za pomocą flagi. Na przykład:
bool isClicked = false;
i umieść następujący kod w klikniętych zdarzeniach, aby odwrócić wartość bool:
isClicked = !isClicked;
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:


Aby zmienić pole wyboru w prosty przycisk włączania/wyłączania przyciągania

https://i.stack.imgur.com/YDq6p.png
myCheckBox.Appearance = System.Windows.Forms.Appearance.Button


Aby dodać niestandardowy włącznik/wyłącznik (przesuwny)

https://i.stack.imgur.com/HEX86.png
  • Kliknij prawym przyciskiem myszy projekt w VS i wybierz `` Dodaj '', a następnie `` Kontrola użytkownika ... '' https://i.stack.imgur.com/yNTEW.png
  • Wpisz nazwę nowego pliku „Toggle.vb”
  • Wklej poniższy kod
  • Przełącz się do swojego formularza i przeciągnij kontrolkę „toggle” z paska narzędzi do formularza https://i.stack.imgur.com/57uAU.png
  • Rozmiar & amp; ustawienia można zmienić jako standardowe sterowanie
  • Kolory można zmieniać w metodzie
    OnPaint
    klasy Toggle


VB.net

Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Windows.FormsPublic Class Toggle
Inherits System.Windows.Forms.UserControl Private _checked As Boolean
Public Property Checked As Boolean
Get
Return _checked
End Get
Set(ByVal value As Boolean)
If Not _checked.Equals(value) Then
_checked = value
Me.OnCheckedChanged()
End If
End Set
End Property Protected Overridable Sub OnCheckedChanged()
RaiseEvent CheckedChanged(Me, EventArgs.Empty)
End Sub Public Event CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) Protected Overrides Sub OnMouseClick(e As MouseEventArgs)
Me.Checked = Not Me.Checked
Me.Invalidate()
MyBase.OnMouseClick(e)
End Sub Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
Me.OnPaintBackground(e)
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias Using path = New GraphicsPath()
Dim d = Padding.All
Dim r = Me.Height - 2 * d
path.AddArc(d, d, r, r, 90, 180)
path.AddArc(Me.Width - r - d, d, r, r, -90, 180)
path.CloseFigure()
e.Graphics.FillPath(If(Checked, Brushes.DarkGray, Brushes.LightGray), path)
r = Height - 1
Dim rect = If(Checked, New System.Drawing.Rectangle(Width - r - 1, 0, r, r), New System.Drawing.Rectangle(0, 0, r, r))
e.Graphics.FillEllipse(If(Checked, Brushes.Green, Brushes.LightSlateGray), rect)
End Using
End Sub
End Class


C#

using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;namespace Your_Project_Name
{
class Toggle : CheckBox
{
public Toggle()
{
SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true);
Padding = new Padding(6);
}
protected override void OnPaint(PaintEventArgs e)
{
this.OnPaintBackground(e);
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
using (var path = new GraphicsPath())
{
var d = Padding.All;
var r = this.Height - 2 * d;
path.AddArc(d, d, r, r, 90, 180);
path.AddArc(this.Width - r - d, d, r, r, -90, 180);
path.CloseFigure();
e.Graphics.FillPath(Checked ? Brushes.DarkGray : Brushes.LightGray, path);
r = Height - 1;
var rect = Checked ? new System.Drawing.Rectangle(Width - r - 1, 0, r, r)
: new System.Drawing.Rectangle(0, 0, r, r);
e.Graphics.FillEllipse(Checked ? Brushes.Green : Brushes.LightSlateGray, rect);
}
}
}
}
Ten kod został zaczerpnięty z kilku źródeł na przestrzeni lat i zawiera kilka drobnych zmian. Wydaje się, że istnieje w różnych formach w różnych witrynach, więc nie jest jasne, do kogo należy przypisać
Cały kod został przetestowany w programie Visual Studio 2017

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się