是否可以在 C# WinForms 中创建切换按钮?我知道您可以使用 CheckBox 控件并将其 Appearance 属性设置为“Button”,但它看起来不正确。我希望它在按下时看起来是凹陷的,而不是平坦的。有什么想法吗?
11 回答
您可以只使用 aCheckBox
并将其外观设置为Button
:
CheckBox checkBox = new System.Windows.Forms.CheckBox();
checkBox.Appearance = System.Windows.Forms.Appearance.Button;
检查 FlatStyle 属性。将其设置为“系统”会使复选框在我的环境中下沉。
这是一种创建切换按钮的简单方法。我在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;
}
这个怎么样?
假设您引用了 System.Windows.Forms。
var cbtnToggler = new CheckBox();
cbtnToggler.Appearance = Appearance.Button;
cbtnToggler.TextAlign = ContentAlignment.MiddleCenter;
cbtnToggler.MinimumSize = new Size(75, 25); //To prevent shrinkage!
希望这可以帮助 ;)
这是我的简单代码,希望对您有所帮助
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";
}
}
如果您不介意将 ToolStripButton 控件托管在 ToolStripContainer 中,您也可以考虑使用它。我认为它可以原生支持按下和未按下状态。
当我的按钮的 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 button with solid border, like 3d sorry for double 张贴。
您始终可以使用自定义图形和 PictureBox 编写自己的按钮,尽管它不一定与用户的 Windows 主题相匹配。
我最终覆盖了 OnPaint 和 OnBackgroundPaint 事件并完全按照我的需要手动绘制按钮。它工作得很好。
使用 if 命令检查状态并让其作为切换按钮操作
private void Protection_ON_OFF_Button_Click(object sender, EventArgs e)
{
if (FolderAddButton.Enabled == true)
{
FolderAddButton.Enabled = false;
}
else
{
FolderAddButton.Enabled = true;
}
}
将 CheckBox 外观更改为 Button 会使您难以调整。您无法更改其尺寸,因为它的大小取决于您的文本或图像的大小。
你可以试试这个:(首先将count变量初始化为 1 | int count = 1)
private void settingsBtn_Click(object sender, EventArgs e)
{
count++;
if (count % 2 == 0)
{
settingsPanel.Show();
}
else
{
settingsPanel.Hide();
}
}
这很简单,但很有效。
警告:这适用于偶尔使用的按钮(即设置),如果使用超过其容量而不关闭应用程序的进程, int/long中的计数值可能会过载。(检查数据类型范围:http: //msdn.microsoft.com/en-us/library/s3f49ktz.aspx)
好消息:如果您运行的应用程序不适合全年 24/7 使用,我认为这很有帮助。重要的是,当应用程序的进程结束并再次运行时,计数将重置为 1。