首页 > 解决方案 > 覆盖 VB.Net TrackBar 控件属性——没有错误,但不工作

问题描述

全部,

如果 Windows 窗体上的 TrackBar 控件被鼠标选中,则可以使用键盘的左/右箭头键分别减少/增加其值。不幸的是,选择控件会导致其周围出现难看的焦点框。

我想覆盖控件的 ShowFocusCues() 属性以隐藏焦点框但保留使用键盘键的能力。下面的代码不会抛出错误,也不会返回我希望达到的结果。请问你能帮忙吗?

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Dim myTrackBar As CustomTrackBar = New CustomTrackBar

        With myTrackBar
            .Top = 100
            .Left = 100
            .Width = 200
            .Minimum = 3
            .Maximum = 25
            .Value = 7
        End With

        Me.Controls.Add(myTrackBar)
    End Sub
End Class


Class CustomTrackBar : Inherits System.Windows.Forms.TrackBar
    Protected Overloads Overrides ReadOnly Property ShowFocusCues() As Boolean
        Get
            Return False
        End Get
    End Property
End Class

标签: vb.net

解决方案


如果这样做很简单,我只想保留键盘功能

我不怀疑 Jimi 在评论中建议的方式更正确,但是将例如 300x50 大小的轨迹栏放在例如 290x40 大小的面板中非常简单,定位在 -5,-5,因此焦点框在视觉上被切割离开。

请注意,我不保证这些像素大小是准确/正确的,因此它们应被视为“仅用于说明目的”;我在手机上,无法测量我为演示而创建的图像,但看起来焦点矩形小于 5 像素......

在此图像中,截止点超过 5 个像素 - 我特意定位了轨迹栏,以便将滑块的一部分切掉,以展示面板内的控件,悬垂面板边界的控件,其可视区域被修剪:

在此处输入图像描述

表单背景为蓝色,面板为灰色,轨迹栏为黄色

  • 向表单添加面板
  • 暂时将你的轨迹栏背景设置为红色,这样你就可以看到它的边界
  • 将轨迹栏拖到面板中,然后再次将其拖到左上角
  • 使用箭头键,例如在向上和向左方向按 5 次
  • 将面板调整到轨迹栏的右下角
  • 按住 shift 并再次使用 up/left 将面板在每个维度上再缩小 5 个像素
  • 如果您正在调整此轨迹栏的大小,请在轨迹栏和面板上适当地设置锚属性
  • 还原背景

如果您不使用锚来调整大小/不知道它是如何工作的,那么最简单的方法是:

任何锚定的边缘在该边缘与其所在容器的同一边缘之间保持相同数量的像素。控件尽量不调整大小

这意味着如果窗口变宽,左右锚定将导致控件拉伸。向右锚定只会导致控件随着窗口变宽而滑动


推荐阅读