移除按钮上的虚线

9
你如何消除选中按钮时出现的点线(无论是通过选项卡还是点击它们)?
这个问题是针对winforms的,非常感谢任何帮助。
编辑:抱歉问了重复的问题。我确实搜索了答案,但我不知道这个问题是由于按钮的“焦点”引起的。因此我没有找到合适的答案。

6
为什么这个问题被投票关闭了?它是一个有效的问题。 - Mike Baxter
当一个按钮被“选中”时,试着通过Windows窗体应用程序进行制表,直到选择一个按钮 - 您将会看到我所指的那条虚线。 - Mike Baxter
你正在询问的是一种覆盖按钮控件默认焦点行为的方法。基本上,你需要子类化或覆盖按钮的 WindowProcedure,默认处理方式,以便在处理窗口消息 WM_PAINT 时自己进行绘制。 - Davide Piras
开发人员往往是高度客观的“T”型人(参见迈尔斯-布里格斯)。开始谈论感受就像戴上绯红字母一样。请考虑重新用技术细节来重述你的问题,而不是关于你对结果的感受。 - P.Brian.Mackey
3
有时候在 Stack Overflow 上发现的热情是令人惊讶的... - Mike Baxter
2
从可访问的角度来看,您不应该删除显示焦点位置的UI。在这种情况下,如果只使用键盘,您如何知道焦点所在的位置? - Michaël Hompus
6个回答

1

你尝试过将焦点从按钮中移除吗?

当按钮被点击时,只需调用Focus();即可。


大纲在Windows 8中不显示,但在7和XP中会显示。 - string.Empty

1
这是因为您的 Button 获得了焦点。虽然可以将其移除,但这意味着在触发您的按钮的焦点 进入事件 时需要将焦点转移到其他内容。
private void button1_Enter(object sender, EventArgs e)
{
    // give focus to something else
}

这样做的问题是您失去了使用键盘选择按钮(使用tab)的能力。此外,更正确的方法是将焦点放在上一个拥有焦点的控件上,而不是传递固定的焦点。

1

创建自定义控件,添加ShowFocusCues,并构建以使用。

示例

public class button : System.Windows.Forms.Button
    {
        protected override bool ShowFocusCues
        {
            get
            {
                return false;
            }
        }
     }

0
您可以将ShowFocusRectangle属性设置为false

System.Windows.Forms.Button 没有叫做 ShowFocusRectangle 的属性。我猜你指的是 DEV Express button。 - Martin Backasch
是的,我指的是DevExpress的simpleButton。 - Ragul s

0

0

这里唯一真正有效的答案,而不需要进行任何黑客行为(将焦点转移到另一个控件)是Wongsathon Tuntanakan的回答。

我参考了他的回答,并且额外做了一点工作,将他的代码转换成了VB:

Public Class YourButtonClass
    Inherits System.Windows.Forms.Button

    Protected Overrides ReadOnly Property ShowFocusCues As Boolean
        Get
            Return False
        End Get
    End Property
End Class

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