gpt4 book ai didi

vb.net - 隐藏 NumericUpDown 控件上的向上/向下按钮

转载 作者:行者123 更新时间:2023-12-03 00:31:29 30 4
gpt4 key购买 nike

我正在尝试以多种方式对 NumericUpDown 进行子类化,以获得更好的功能和外观。

由于 NUD 是由两个控件构成的,因此我想在属性“Increment”设置为 0 的情况下隐藏向上/向下按钮。

此代码位于子类中:

Protected Overrides Sub OnTextBoxResize(ByVal source As Object, ByVal e As System.EventArgs)

Controls(0).Hide()
End Sub

...并且工作正常。但在该函数中,我无法像这样检查 Increment 属性的值:

Protected Overrides Sub OnTextBoxResize(ByVal source As Object, ByVal e As System.EventArgs)

If Me.Increment = 0 Then
Controls(0).Hide()
End if
End Sub

在此函数的范围内,无法访问 Me。我还尝试使用局部变量,但找不到在 OnTextBoxResize 之前触发哪个事件来读取 Increment 属性的值。

在这种情况下该怎么做才能获得所需的功能?

最佳答案

这似乎工作得相当好。它会隐藏 Increment 属性,以便在更改 Increment 值时设置微调器控件的可见性。基础控件调用一个名为 PositionControls 的底层私有(private)方法,您无法阻止该方法 - 该方法可能会产生一些闪烁,但在我的测试中,它没有。

Public Class MyNumBox
Inherits NumericUpDown

Shadows Property Increment As Decimal
Get
Return MyBase.Increment
End Get
Set(value As Decimal)
MyBase.Increment = value
OnTextBoxResize(Me, EventArgs.Empty)
End Set
End Property

Protected Overrides Sub OnHandleCreated(e As EventArgs)
MyBase.OnHandleCreated(e)
OnTextBoxResize(Me, EventArgs.Empty)
End Sub

Protected Overrides Sub OnTextBoxResize(source As Object, e As EventArgs)
If Me.IsHandleCreated Then
Me.Height = Me.PreferredHeight
Me.Controls(0).Visible = (MyBase.Increment > 0)
Dim borderWidth As Integer = 0
If Me.BorderStyle > BorderStyle.None Then
borderWidth = SystemInformation.Border3DSize.Width
End If
Dim textWidth As Integer
If Me.Increment = 0 Then
textWidth = Me.ClientSize.Width - (borderWidth * 2)
Else
textWidth = Me.ClientSize.Width - Me.Controls(0).Width - (borderWidth * 2)
End If
If Me.UpDownAlign = LeftRightAlignment.Left Then
If Me.Increment = 0 Then
Me.Controls(1).SetBounds(borderWidth, borderWidth, _
textWidth, Me.Controls(1).Height)
Else
Me.Controls(1).SetBounds(borderWidth + Me.Controls(0).Width, _
Me.Controls(1).Top, textWidth, Me.Controls(1).Height)
End If
Else
Me.Controls(1).SetBounds(borderWidth, Me.Controls(1).Top, _
textWidth, Me.Controls(1).Height)
End If
Me.Refresh()
End If
End Sub
End Class

在 OnTextBoxResize 重写中,我将控件重新定位到正确的位置,并且此版本确实考虑了 UpDownAlign 属性。

关于vb.net - 隐藏 NumericUpDown 控件上的向上/向下按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19517661/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com