【问题标题】:How to allow entry in NumericUpDown only via up and down arrow如何仅通过向上和向下箭头允许在 NumericUpDown 中输入
【发布时间】:2017-12-06 20:10:02
【问题描述】:

我有一个NumericUpDown,其中向上和向下箭头用于输入整数。所有这些都已设置,但我想通过单击禁用手动输入值。我希望用户只能通过向上和向下箭头更改值。有人可以指导我如何实现这一目标。

目前我添加了 ValueChanged 事件 来处理一些逻辑。但是,当手动更改值时,不会触发该事件。请指导我。

【问题讨论】:

  • “UI 控件”是什么意思?用户控件?自定义控件?这看起来和听起来都像 NumericUpDown,是这样的吗?
  • 数字上下控制
  • 当用户离开控件时它会被触发 - 在那之前任何值都只是暂定的。无论他们如何输入一个值,它都会被强制在 Min 和 Max 之间,那么为什么需要禁用输入呢?此外,生成的 Value 将是十进制
  • 这有悖于控件的设计。如果您不想要 NumericUpDown 的行为,那么为什么要使用呢?只需使用文本框,禁用输入,然后处理按键以增加和减少。
  • @DonBoitnott OP 只希望鼠标完成这项工作。

标签: .net vb.net winforms numericupdown


【解决方案1】:

每当有人在控件获得焦点时按下一个键时都会触发。

Private Sub NumericUpDown1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles NumericUpDown1.KeyPress
    e.Handled = True
End Sub

它所做的只是有效地拦截按键,并告诉系统按键已在您的子系统中处理,不会发生进一步的按键处理。

【讨论】:

  • 正确。并且错了。请注意,问题的关键是“我希望用户只能通过向上和向下箭头更改值。”
  • @DonBoitnott 我理解这意味着控件受到限制,因此只能通过鼠标单击使用。上面的代码强制执行此操作。
【解决方案2】:

除了处理按键事件,还可以将控件的编辑部分设为只读:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    DirectCast(Me.NumericUpDown1.Controls(1), TextBox).ReadOnly= True
    DirectCast(Me.NumericUpDown1.Controls(1), TextBox).BackColor= Color.White
End Sub

NumericUpDown 是一个复合控件,由一个自定义 TextBox 和一个用于 Buttons 部分的自定义控件组成。你可以用这些控件做任何事情。处理这些事件、更改属性等等。

【讨论】:

    猜你喜欢
    • 2014-08-03
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    相关资源
    最近更新 更多