按钮问题 (.Net 2008,框架3.5)

3

当通过按Tab键聚焦按钮时,会在其周围出现一个矩形。即使将按钮的TabStop属性设置为false,使用鼠标单击按钮时也会出现该矩形。有没有可能停止矩形的出现?请帮忙解决。谢谢。

2个回答

7
您的按钮上出现的矩形称为“焦点矩形”,它指示表单上当前具有输入焦点的控件。
您遇到的问题的解释是,即使按钮不是选项卡停靠点,当用鼠标单击它时,它仍然会被选中,因此焦点矩形仍然会出现。 TabStop属性仅控制控件是否可以使用Tab键接收焦点,而不控制用户是否可以选择它。
焦点矩形对于指示用户具有焦点的控件非常有用。在选定按钮的情况下按Enter或Space键将导致按钮被“推动”。如果没有焦点矩形,则键盘用户可能很难浏览应用程序。 如果您只想完全防止按钮获得焦点(从而防止焦点矩形出现),则可以将其Enabled属性设置为False。当然,这也会阻止用户单击该按钮。 如果您希望按钮保持可点击但在获得焦点时不绘制矩形(可能会降低程序的可用性),则需要创建一个自定义控件,该控件派生自现有的Button控件。在您的控件中,您可以重写ShowFocusCues属性(默认情况下为True在一个Button控件上)以返回False。例如:
public class NoFocusButton : Button
{
    protected override bool ShowFocusCues
    {
        get
        {
                return false;
        }
    }
}

另外,您可以在派生的按钮控件中覆盖 OnPaint 事件。这将允许您完全控制绘制按钮的方式(包括删除焦点矩形),但这也带来了与奖励同样多的风险。有关此方法的更多信息,请参见 此答案以回答其他问题


非常感谢。根据您所说的,我已经发布了我的解决方案。 - priyamtheone

0
类 CustomButton : System.Windows.Forms.Button { private bool _DisplayFocusCues = true; protected override bool ShowFocusCues { get { return _DisplayFocusCues; } }
public bool DisplayFocusCues { get { return _DisplayFocusCues; } set { _DisplayFocusCues = value; } } }

使用此类,您也可以在设计时设置 DisplayFocusCues。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接