是否可以在C#WinForms中创建切换按钮?我知道您可以使用CheckBox控件并将其Appearance属性设置为“ Button”,但是它看起来并不正确。我希望它在按下时看起来凹陷而不是平坦。有什么想法吗?
是否可以在C#WinForms中创建切换按钮?我知道您可以使用CheckBox控件并将其Appearance属性设置为“ Button”,但是它看起来并不正确。我希望它在按下时看起来凹陷而不是平坦。有什么想法吗?
Answers:
检查FlatStyle属性。将其设置为“系统”会使该复选框在我的环境中下沉。
thers是创建切换按钮的简单方法。我在vs2010中进行了测试。这是完美的。
ToolStripButton具有“已检查”属性和“ 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;
}
这是我的简单代码,希望对您有所帮助
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时,它看起来很平坦。并且将其设置为弹出时,仅在鼠标悬停时才弹出。要么就是我想要的。我希望它在选中时看起来凹陷,而在未选中时凸起,并且在鼠标悬停时保持不变(该按钮实际上是一个复选框,但是该复选框的外观属性设置为button)。
我最终将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 对不起,可能会重复发布。
最后,我重写了OnPaint和OnBackgroundPaint事件,并根据需要手动绘制按钮。效果很好。
将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。
currentlyVisible = !currentlyVisible; if(currentlyVisible) { settingsPanel.Show(); } ...