按钮问题(.Net 2008,Framework 3.5)

pri*_*one 3 .net user-interface button winforms

按Tab键聚焦按钮时,会出现一个矩形.即使按钮的TabStop属性设置为false,当用鼠标单击按钮时,也会出现矩形.是否可以阻止矩形出现?请帮忙.问候.

Cod*_*ray 7

出现在按钮上的矩形称为"焦点矩形".它指示表单上的哪个控件当前具有输入焦点.

您遇到的问题的解释是,即使按钮不是制表位,当用鼠标单击它时它仍然会被选中,因此仍然会出现焦点矩形.该TabStop属性仅控制控件Tab是否可以通过键获得焦点,而不是用户是否可以选择.

焦点矩形对于向用户指示哪个控件具有焦点是有用的.按下选择按钮的EnterSpace键将导致按钮被"推".如果没有焦点矩形,键盘用户可能很难导航您的应用程序.

如果您只是想阻止按钮获得焦点(从而防止出现焦点矩形),您可以将其Enabled属性设置为False.当然,这也会阻止用户点击按钮.

如果你想让按钮保持可点击状态,但是当它有焦点时会阻止画一个矩形(以你的程序的可用性为代价,我可能会提醒你),你必须创建自己的自定义控件,它来自现有的Button控件.在您的控件中,您可以覆盖ShowFocusCues属性(True默认情况下在Button控件上)以返回False.例如:

public class NoFocusButton : Button
{
    protected override bool ShowFocusCues
    {
        get
        {
                return false;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以OnPaint在派生按钮控件中覆盖事件.这样您就可以完全控制按钮的绘制方式(包括移除焦点矩形),其中包含与奖励一样多的风险.有关此路线的更多信息,请参阅另一个问题的答案.