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





Вы всегда можете закодировать свою собственную кнопку с настраиваемой графикой и PictureBox, хотя она не обязательно будет соответствовать теме Windows ваших пользователей.
Проверьте свойство FlatStyle. Установка этого параметра в «Система» приводит к потере флажка в моем окружении.
Он поднимается, когда не установлен, и опускается, когда проверяется на моей машине (Vista выглядит как Win 2000 - тема Windows Classic).
Ты прав! Я случайно нашел его в Popup для стиля. Виноват.
Если кнопки должны быть взаимоисключающими, вы можете сделать то же самое с RadioButton.
Вы также можете рассмотреть элемент управления ToolStripButton, если вы не против разместить его в ToolStripContainer. Я думаю, что он может изначально поддерживать нажатые и неотжатые состояния.
В итоге я переопределил события OnPaint и OnBackgroundPaint и вручную нарисовал кнопку точно так, как мне нужно. Это сработало очень хорошо.
Вы можете просто использовать CheckBox и установить его внешний вид на Button:
CheckBox checkBox = new System.Windows.Forms.CheckBox();
checkBox.Appearance = System.Windows.Forms.Appearance.Button;
Используйте ссылка archive.org
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;
}
Это не контроль. Как встроить его в графический интерфейс?
Вы можете использовать его в панели инструментов.
Изменение внешнего вида флажка на кнопку вызовет у вас трудности с настройками. Вы не можете изменить его размеры, потому что его размер зависит от размера вашего текста или изображения.
Вы можете попробовать это: (сначала инициализируйте переменную считать равной 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(); } ...
Как насчет этого?
Предполагая, что у вас есть ссылка на 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";
}
}
Это был неплохой ответ, конечно, флажок может отображаться как кнопка, однако флажки имеют ограничения (нельзя установить собственный размер независимо от размера текста), поэтому голосование за.
Идея понравилась, но визуальное расположение элементов управления было непонятным. Поигрался с символами и даже изображениями, чтобы добиться желаемого эффекта.
Когда 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 Извините за двойную публикацию.
Однако это делает его плоским, когда флажок снят.