ToggleButton в C# WinForms

Можно ли создать кнопку переключения в C# WinForms? Я знаю, что вы можете использовать элемент управления CheckBox и установить для его свойства Appearance значение «Button», но это выглядит неправильно. Я хочу, чтобы при нажатии он казался утопленным, а не плоским. Какие-нибудь мысли?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
74
0
132 592
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

Вы всегда можете закодировать свою собственную кнопку с настраиваемой графикой и PictureBox, хотя она не обязательно будет соответствовать теме Windows ваших пользователей.

Проверьте свойство FlatStyle. Установка этого параметра в «Система» приводит к потере флажка в моем окружении.

Однако это делает его плоским, когда флажок снят.

Jason Down 12.11.2008 00:12

Он поднимается, когда не установлен, и опускается, когда проверяется на моей машине (Vista выглядит как Win 2000 - тема Windows Classic).

Stanislav Kniazev 12.11.2008 00:15

Ты прав! Я случайно нашел его в Popup для стиля. Виноват.

Jason Down 12.11.2008 00:17

Если кнопки должны быть взаимоисключающими, вы можете сделать то же самое с RadioButton.

Ken 19.04.2010 18:06

Вы также можете рассмотреть элемент управления ToolStripButton, если вы не против разместить его в ToolStripContainer. Я думаю, что он может изначально поддерживать нажатые и неотжатые состояния.

Ответ принят как подходящий

В итоге я переопределил события OnPaint и OnBackgroundPaint и вручную нарисовал кнопку точно так, как мне нужно. Это сработало очень хорошо.

codeproject.com/Tips/794577/Windows-Forms-ToggleButton Вот такой код ..
ephraim 05.05.2019 16:43

Вы можете просто использовать CheckBox и установить его внешний вид на Button:

CheckBox checkBox = new System.Windows.Forms.CheckBox(); 
checkBox.Appearance = System.Windows.Forms.Appearance.Button; 

Используйте ссылка archive.org

rabejens 19.01.2016 13:01

thers - это простой способ создать кнопку-переключатель. Тестирую в vs2010. Идеально.

ToolStripButton имеет свойство Checked и свойство CheckOnClik. Вы можете использовать его как кнопку переключения

tbtnCross.CheckOnClick = true;

ИЛИ ЖЕ

    tbtnCross.CheckOnClick = false;
    tbtnCross.Click += new EventHandler(tbtnCross_Click);
    .....

    void tbtnCross_Click(object sender, EventArgs e)
    {
        ToolStripButton target = sender as ToolStripButton;
        target.Checked = !target.Checked;
    }

Кроме того, вы можете создать список переключателей следующим образом:

        private void Form1_Load(object sender, EventArgs e)
    {
        arrToolView[0] = tbtnCross;
        arrToolView[1] = tbtnLongtitude;
        arrToolView[2] = tbtnTerrain;
        arrToolView[3] = tbtnResult;
        for (int i = 0; i<arrToolView.Length; i++)
        {
            arrToolView[i].CheckOnClick = false;
            arrToolView[i].Click += new EventHandler(tbtnView_Click);
        }
        InitTree();
    }

    void tbtnView_Click(object sender, EventArgs e)
    {
        ToolStripButton target = sender as ToolStripButton;
        if (target.Checked) return;
        foreach (ToolStripButton btn in arrToolView)
        {
                btn.Checked = false;
                //btn.CheckState = CheckState.Unchecked;
        }
        target.Checked = true;
        target.CheckState = CheckState.Checked;

    }

Это не контроль. Как встроить его в графический интерфейс?

Bitterblue 14.07.2014 18:26

Вы можете использовать его в панели инструментов.

legendJSLC 11.05.2015 17:03

Изменение внешнего вида флажка на кнопку вызовет у вас трудности с настройками. Вы не можете изменить его размеры, потому что его размер зависит от размера вашего текста или изображения.

Вы можете попробовать это: (сначала инициализируйте переменную считать равной 1 | int count = 1)

private void settingsBtn_Click(object sender, EventArgs e)
    {
        count++;

        if (count % 2 == 0)
        {
            settingsPanel.Show();
        }
        else
        {
            settingsPanel.Hide();
        }
    }

Это очень просто, но работает.

Предупреждение: Это будет хорошо работать с кнопками, которые используются время от времени (например, с настройками), значение count в int / long может быть перегружено, когда используется больше, чем его емкость, без закрытия процесса приложения. (Проверьте диапазоны типов данных: http://msdn.microsoft.com/en-us/library/s3f49ktz.aspx)

Хорошие новости: Если вы используете приложение, которое не предназначено для использования 24/7 круглый год, я думаю, это полезно. Важно то, что когда процесс приложения завершится и вы снова запустите его, считать будет сброшен на 1.

Почему бы просто не использовать логический флаг? currentlyVisible = !currentlyVisible; if (currentlyVisible) { settingsPanel.Show(); } ...

Sebastian Negraszus 25.04.2014 16:56

Как насчет этого?

Предполагая, что у вас есть ссылка на System.Windows.Forms.

var cbtnToggler = new CheckBox();
cbtnToggler.Appearance = Appearance.Button;
cbtnToggler.TextAlign = ContentAlignment.MiddleCenter;
cbtnToggler.MinimumSize = new Size(75, 25); //To prevent shrinkage!

Надеюсь это поможет ;)

используйте команду if, чтобы проверить статус и позволить работать как кнопку переключения

private void Protection_ON_OFF_Button_Click(object sender, EventArgs e)
        {

            if (FolderAddButton.Enabled == true)
            {
                FolderAddButton.Enabled = false;
            }
            else
            {
                FolderAddButton.Enabled = true;
            }
        }

Это мои простые коды, надеюсь, они вам помогут

private void button2_Click(object sender, EventArgs e)
    {
        if (button2.Text == "ON")
        {
            panel_light.BackColor = Color.Yellow; //symbolizes light turned on

            button2.Text = "OFF";
        }

        else if (button2.Text == "OFF")
        {
            panel_light.BackColor = Color.Black; //symbolizes light turned off

            button2.Text = "ON";
        }
    }

Это был неплохой ответ, конечно, флажок может отображаться как кнопка, однако флажки имеют ограничения (нельзя установить собственный размер независимо от размера текста), поэтому голосование за.

user219279 25.01.2018 15:32

Идея понравилась, но визуальное расположение элементов управления было непонятным. Поигрался с символами и даже изображениями, чтобы добиться желаемого эффекта.

j.hull 29.09.2020 22:49

Когда FlatStyle моей кнопки настроен на system, он выглядит плоским. И когда он настроен на всплывающее окно, оно появляется только при наведении курсора мыши. Либо то, что я хочу. Я хочу, чтобы он выглядел затонувшим при установке флажка и поднятым при снятии флажка и без изменений при наведении указателя мыши (кнопка на самом деле является флажком, но свойство внешнего вида флажка установлено на кнопку).

В итоге я установил FlatStyle на flat и написал новый обработчик событий Paint.

 private void checkbox_paint(object sender, PaintEventArgs e)
        {
            CheckBox myCheckbox = (CheckBox)sender;
            Rectangle borderRectangle = myCheckbox.ClientRectangle;
            if (myCheckbox.Checked)
            {
                ControlPaint.DrawBorder3D(e.Graphics, borderRectangle,
                    Border3DStyle.Sunken);
            }
            else
            {
                ControlPaint.DrawBorder3D(e.Graphics, borderRectangle,
                    Border3DStyle.Raised);
            }
        }

Я даю аналогичный ответ на этот вопрос: C# кнопка winforms со сплошной рамкой, например 3d Извините за двойную публикацию.

Другие вопросы по теме