Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winforms 当光标位于win forms复选框内时,高亮显示该复选框_Winforms - Fatal编程技术网

Winforms 当光标位于win forms复选框内时,高亮显示该复选框

Winforms 当光标位于win forms复选框内时,高亮显示该复选框,winforms,Winforms,我有一个没有指定文本的复选框。现在每当我按下这个复选框,它都不会突出显示。我甚至尝试在复选框中设置焦点。我在这个事件中检查了焦点,焦点在这个复选框中。如何使其高亮显示,以便用户知道光标位于复选框中 试着在复选框中加一个空格 或 将AutoSize设置为false 设置复选框的大小 然后WinForms可能会在某个地方绘制焦点ret 否则,您必须自定义绘制复选框,或者自己在复选框周围绘制焦点记录 无论您做什么,它看起来都不太好,因为用户希望焦点rec围绕复选框的标签,而您希望有一个没有标签的复选框

我有一个没有指定文本的复选框。现在每当我按下这个复选框,它都不会突出显示。我甚至尝试在复选框中设置焦点。我在这个事件中检查了焦点,焦点在这个复选框中。如何使其高亮显示,以便用户知道光标位于复选框中

试着在复选框中加一个空格 或

将AutoSize设置为false 设置复选框的大小 然后WinForms可能会在某个地方绘制焦点ret

否则,您必须自定义绘制复选框,或者自己在复选框周围绘制焦点记录


无论您做什么,它看起来都不太好,因为用户希望焦点rec围绕复选框的标签,而您希望有一个没有标签的复选框。

实际上突出显示在复选框的文本上,而不是复选框本身

因此,如果我是你,我会在复选框的背景中放置任何控件,并在复选框聚焦时为其提供焦点,以使其具有与默认控件相同的外观


它将以复选框突出显示的形式显示给最终用户。

我通过下面提到的方法实现了这一点

使用面板。将复选框推到该面板内。设置面板的尺寸,使其看起来像复选框周围的矩形。在复选框中输入事件设置边框

BorderStyle.FixedSingle;
在复选框_Leave事件中,再次将边框设置为

BorderStyle.None;

这样,它会告诉用户焦点在复选框内。

要使复选框突出显示,我让它在获得焦点时更改颜色,在失去焦点时更改颜色

此部分的格式为1.Designer.cs:

private void InitializeComponent()
    {...
    ckBox1.GotFocus += new System.EventHandler(checkBox_Highlight);
    ckBox1.LostFocus += new System.EventHandler(checkBox_EndHighlight);
    ckBox1.MouseHover += new System.EventHandler(checkBox_Highlight);
    ckBox1.MouseLeave += new System.EventHandler(checkBox_EndHighlight);
     }
本部分的格式为1:

 private void checkBox_Highlight(object sender, EventArgs e)
    {
        CheckBox control = (CheckBox)sender;
        control.FlatStyle = FlatStyle.Flat;
        control.ForeColor = Color.Blue;
    }

    private void checkBox_EndHighlight(object sender, EventArgs e)
    {
        CheckBox control = (CheckBox)sender;
        if (!control.Focused)
        {
            control.ForeColor = DefaultForeColor;
        }
    }

在切换时,这会在Enter和on Left的复选框下方放置一个浅蓝色阴影-至少在my Windows7上是这样:

    ...
    checkBox1.Enter += new System.EventHandler(check_Enter);
    checkBox1.Leave += new System.EventHandler(check_Leave);
    ...

    private void check_Enter(object sender, EventArgs e)
    {
        ((CheckBox)sender).BackColor = SystemColors.Highlight;
    }

    private void check_Leave(object sender, EventArgs e)
    {
        ((CheckBox)sender).BackColor = Color.Transparent;
    }

如何在复选框中放置空格。你的意思是说,在复选框中输入事件。你能告诉我如何绘制焦点矩形吗。我正在使用ControlPaint.DrawFocusRectangleGraphics,矩形。如何在复选框\输入事件中获取图形。据我所知,它在OnPaint事件中可用。我会这样做。感谢您指出。-1因为将焦点交给另一个控件将阻止空格键更改复选框的值。方法是,将比复选框大一点的按钮放在复选框后面。然后将他的flatStyle属性设置为flat,将foreColor属性设置为表单背景的相同颜色。然后,在按钮的click事件上,编写以下代码checkBox1.Checked=!复选框1.选中*这解决了lan Ringrose提到的错误。就这样