none
【VB.NET】Focus到按钮上时没有虚线 RRS feed

  • 问题

  • 背景:
    .NET Framework1.1升级到.NET Framework4.7.2的项目
    步骤:
    1.Form初期打开,Focus在TextBox上(如图1)
    2.按Tab键,Focus第一次移动到按钮上,但是没有虚线(如图2)
    3.再按两次Tab键,Focus第二次移动到按钮上,有虚线(如图3)

    问题:
    图3,有虚线的样式应该是正确的。
    图2,为什么没有虚线呢?

    按钮属性设定代码如图4

    图1

    图2

    图3

    图4

    2020年9月23日 3:09

全部回复

  • Hi 撒子去了,

    根据我的测试,我没有发现第一次按Tab时button没有出现虚线,但第二次出现虚线的行为,而当我在 Form Load事件中将ActiveControl 属性设置为 Button时,Form显示时的 Button没有虚线,但按 Tab再次切换到该Button时出现虚线。

    该行为是 Button控件的默认行为,从Windows 2000开始,默认情况下第一次会隐藏虚线,该行为的初衷是为了让其看起来更简单干净,当然你也可以通过定义自己的 Button来规范化虚线是否显示的问题。

    获得焦点虚线都显示:

    Public Class CustomButton1
        Inherits System.Windows.Forms.Button
    
        Protected Overrides ReadOnly Property ShowFocusCues As Boolean
            Get
                Return Me.Focused
            End Get
        End Property
    End Class

    获得焦点虚线都不显示:

    Public Class CustomButton2
        Inherits System.Windows.Forms.Button
    
        Protected Overrides ReadOnly Property ShowFocusCues As Boolean
            Get
                Return False
            End Get
        End Property
    End Class

    插入上述代码并build项目以后可从 toolbox中选择相应的自定义控件到 form上,实现效果如下:

    Best Regards,

    Xingyu Zhao


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.



    2020年9月23日 6:34
    版主
  • 你好,多谢回复。

    目前我们的代码中ActiveControl 属性=TextBox1

    所以应该不是这个属性设置的原因。

    您回答的Windows 2000,应该也不是操作系统的原因,理由如下:

    我们.NET1.1 和 .NET4.7.2两版代码都是运行在Win10上的,

    所以我还是觉得应该是.net版本升级导致的。

    能再麻烦您从.NET4.7.2上确认一下吗?

    谢谢了

    2020年9月23日 8:08
  • Hi,

    以下是 .NET Framework 4.7.2版本的测试结果(已设置 ActiveControl属性为 TextBox1).:

    可以看到当使用 Tab切换到 Button1时,每次都有虚线显示。但若设置 ActiveControl 属性为 Button1,则刚开始不会显示虚线。

    你是否尝试过使用上述所说的自定义控件方式,如果其确实有效,你可以采用该方式管理 Button是否显示虚线。

    Best Regards,

    Xingyu Zhao


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2020年9月23日 9:51
    版主
  • 多谢回复。

    修改方案谢谢了,但是我这边的项目用到的按钮非常非常多,不能重写后替换。

    如果是新建一个Form,TextBox1,Button1,设置ActiveControl属性为 TextBox1,

    Tab切换到 Button1时,每次都有虚线显示。

    这一点我这里的.NET4.7.2环境下也是没有问题的。

    但是......回到我这个项目背景上,问题如下:

    【背景】

    .NET Framework1.1升级到.NET Framework4.7.2的项目。

    【处理】

    1).NET Framework1.1的工程,Form中有TextBox1,Button1,设置ActiveControl属性为 TextBox1

    2).NET Framework1.1的工程升级到.NET4.7.2

    【问题】

    1).NET1.1  的工程,Tab切换到 Button1时,每次都有虚线显示。     ----OK

    2).NET4.7.2 的工程,Tab切换到 Button1时,第一次没有虚线显示。----NG

    那么,我想知道为什么这样的升级时,为什么在.NET4.7.2中NG ?

    我觉得是.NET框架的原因,但是我的客户想要一个非常明确的理由,

    实在不好意思,还希望就这块儿原因能给个解释。

    非常感谢!

    2020年9月24日 1:18
  • Hi,

    很遗憾我们并没有 .net Framework 1.1的环境,所以无法重现你的问题,为了更好的定位.NET框架的问题,你可以尝试其他.NET Framework版本(比如最新的.NET Framework 4.8),确定其是否是 .NET Framework4.7.2 的问题还是在 .NET Framework框架更替的过程中某一次的更新导致了此问题。

    由于该问题和 .NET框架相关,你可以在以下论坛用英文发帖并报告你的问题,以获得关于框架更多的帮助。

    Developer Community

    感谢你的理解。

    Best Regards,

    Xingyu Zhao


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2020年9月24日 1:48
    版主
  • 你好

    我这边有.NET1.1的环境,通过以下步骤确认的结果来看,

    基本确定是.NET1.1升级到.NET4.7.2时导致的了,推测这里应该是.NET框架的bug。

    【确认步骤】
    1.VS2003 .NET1.1,新建Form,TextBox1,Button1 (有虚线)    ----OK
    2.VS2019打开1的工程,升级到.NET4.5,跟1.1现象一致 (有虚线)    ----OK
    3.VS2019打开1的工程,升级到.NET4.6,跟1.1现象一致 (有虚线)    ----OK
    4.VS2019打开1的工程,升级到.NET4.7.2,跟1.1现象不一致(第一次没有虚线)    ----NG

    这样的话,原因基本就清除了。您那边能否帮忙确认这个问题是否是.NET4.7.2升级存在的bug呢?

    我这边想要一个官方的回答,谢谢了!

    2020年9月24日 2:28
  • Hi,

    是否尝试过升级到 4.8版本,如果4.8版本也没有问题的话,那就是4.7.2版本存在的问题了。

    如果4.8版本也出现了此问题,那应该是4.7.2版本更新中的某一处更新导致了此问题。

    Best Regards,

    Xingyu Zhao


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2020年9月24日 2:32
    版主
  • 你好

    升级到4.8版本也有问题。

    那就是说向4.7.2及4.7.2以后的版本更新中的某一处更新导致了此问题吧

    2020年9月24日 4:57
  • Hi,

    是的,问题应当是来自于4.7.2版本处的更新,从而导致后续4.8版本也出现了此问题。

    至于是何处更新,你可以在上面提到的Developer Community论坛询问以获得更多的细节。

    希望对你有帮助。

    Best Regards,

    Xingyu Zhao


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2020年9月24日 6:03
    版主