winforms 如何在单击时正确突出显示按钮?

ktecyv1j  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(826)

所以我用Winforms在C#中构建了一个应用程序,我的应用程序使用了一些不同的按钮。我希望在被单击的按钮上有一个突出显示,以显示您所在的“标签”。
我试着做了以下几点:

// BUTTONS //
private void dashboard_btn_Click(object sender, EventArgs e)
{
    // Load Form
    OpenChildForm(new FormDashboard());
    dashboard_btn.FlatAppearance.BorderColor = Color.Red;
    dashboard_btn.FlatAppearance.BorderSize = 1;
}

然而,这当然不能很好地工作,因为它添加了一个边界周围的按钮,但当我单击另一个按钮的边界也停留在周围的前一个按钮。
如何实现一个功能,在单击的按钮周围添加边框,但在单击另一个按钮后边框消失?
感谢您的反馈!
编辑:
我已经实现了Jimi的建议,并使用Leave事件将按钮周围的边框更改回0。但是,我不确定如何以全局方式实现这一点,因此我的所有按钮都订阅了此事件。
我的代码现在如下所示;
第一次

cngwdvgl

cngwdvgl1#

这可能有助于RadioButton样式的功能,因为单击同一容器中的不同单选按钮将取消选中其他单选按钮。您可以创建一个简单的自定义RadioButtonEx类,其中Appearance属性设置为Button,然后在Checked属性更改时更改边框样式。在此范例中,Click事件已变更为static,因此按一下任何按钮都会将事件导向通用onAnyClick方法。

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
        RadioButtonEx.Click += onAnyClick;
    }

    private void onAnyClick(object sender, EventArgs e)
    {
        label1.Text = ((RadioButtonEx)sender).Text;
    }
}
public class RadioButtonEx : RadioButton
{
    public static new event EventHandler Click;
    public RadioButtonEx() 
    {
        FlatAppearance.BorderColor = Color.Red;
        FlatAppearance.BorderSize = 1;
        Appearance = Appearance.Button;
    }
    protected override void OnCheckedChanged(EventArgs e)
    {
        base.OnCheckedChanged(e);
        if(Checked)
        {
            FlatStyle = FlatStyle.Flat;
            Click?.Invoke(this, EventArgs.Empty);
        }
        else
        {
            FlatStyle = FlatStyle.Standard;
        }
    }
}

相关问题