如何使用VB.NET隐藏NumericUpDown控件的增减按钮?

2026-05-06 11:381阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计510个文字,预计阅读时间需要3分钟。

如何使用VB.NET隐藏NumericUpDown控件的增减按钮?

我尝试以多种方式子类化NumericUpDown以获得更好的功能和外观。由于NumericUpDown是由两个控件构成的,我想在属性Increment设置为0的情况下隐藏上下按钮。此代码位于子类中:Protected Overrides Sub Sub_()

如何使用VB.NET隐藏NumericUpDown控件的增减按钮?

我试图以几种方式子类化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

在此功能的范围内,我无法访问.
我也尝试使用局部变量,但无法在OnTextBoxResize之前找到触发哪个事件来读取Increment属性的值.

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

这似乎运作得相当好.它将增量属性设置为阴影,以便在更改增量值时设置微调控件的可见性.基本控件调用一个名为PositionControls的底层私有方法,你无法阻止 – 该方法可能会产生一些闪烁,但在我的测试中,它没有.

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属性.

本文共计510个文字,预计阅读时间需要3分钟。

如何使用VB.NET隐藏NumericUpDown控件的增减按钮?

我尝试以多种方式子类化NumericUpDown以获得更好的功能和外观。由于NumericUpDown是由两个控件构成的,我想在属性Increment设置为0的情况下隐藏上下按钮。此代码位于子类中:Protected Overrides Sub Sub_()

如何使用VB.NET隐藏NumericUpDown控件的增减按钮?

我试图以几种方式子类化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

在此功能的范围内,我无法访问.
我也尝试使用局部变量,但无法在OnTextBoxResize之前找到触发哪个事件来读取Increment属性的值.

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

这似乎运作得相当好.它将增量属性设置为阴影,以便在更改增量值时设置微调控件的可见性.基本控件调用一个名为PositionControls的底层私有方法,你无法阻止 – 该方法可能会产生一些闪烁,但在我的测试中,它没有.

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属性.