C#WinForms中的ToggleButton

Jon*_*ury 62 c# button winforms

是否可以在C#WinForms中创建切换按钮?我知道您可以使用CheckBox控件并将其外观属性设置为"Button",但它看起来不正确.我希望它在按下时显得凹陷而不是平坦.有什么想法吗?

Sim*_*bin 136

您可以使用a CheckBox并将其外观设置为Button:

CheckBox checkBox = new System.Windows.Forms.CheckBox(); 
checkBox.Appearance = System.Windows.Forms.Appearance.Button; 
Run Code Online (Sandbox Code Playgroud)


Sta*_*zev 10

检查FlatStyle属性.将其设置为"系统"会使复选框在我的环境中陷入沉没.


C. *_* 76 5

如果您不介意将 ToolStripButton 控件托管在 ToolStripContainer 中,也可以考虑使用它。我认为它本身可以支持受压和未受压状态。


小智 5

这是一种创建切换按钮的简单方法。我在vs2010中测试过。这是完美的。

ToolStripButton 有一个“Checked”属性和一个“CheckOnClik”属性。您可以将其用作切换按钮

tbtnCross.CheckOnClick = true;
Run Code Online (Sandbox Code Playgroud)

或者

    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;
    }
Run Code Online (Sandbox Code Playgroud)

此外,您可以像这样创建切换按钮列表:

        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;

    }
Run Code Online (Sandbox Code Playgroud)


JRO*_*JRO 5

这个怎么样?

假设您引用了System.Windows.Forms.

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

希望这可以帮助 ;)


Ant*_*ony 5

这是我的简单代码,希望对您有所帮助

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";
        }
    }
Run Code Online (Sandbox Code Playgroud)


Jon*_*ury 0

我最终重写了 OnPaint 和 OnBackgroundPaint 事件,并完全按照我需要的方式手动绘制按钮。效果很好。