Winforms 如何使用NumericUpDown控件防止键输入?
我在winform上有一个numericupdown控件,我在测试时注意到,不仅可以通过按向上键和向下键来更改值,还可以从键盘输入值 我不想那样。我只希望用户能够通过单击框中的向上和向下按钮来更改numericupdown的值 到目前为止,我根本找不到解决办法Winforms 如何使用NumericUpDown控件防止键输入?,winforms,delphi-prism,numericupdown,oxygene,Winforms,Delphi Prism,Numericupdown,Oxygene,我在winform上有一个numericupdown控件,我在测试时注意到,不仅可以通过按向上键和向下键来更改值,还可以从键盘输入值 我不想那样。我只希望用户能够通过单击框中的向上和向下按钮来更改numericupdown的值 到目前为止,我根本找不到解决办法 有人知道如何做到这一点吗?根据您允许的值范围,这听起来不利于用户体验 为此,您需要创建一个继承自NumericUpDown的控件,并重写OnKeyPress/OnKeyDown方法。根据您允许的值范围,这听起来不利于用户体验 要执行此操作
有人知道如何做到这一点吗?根据您允许的值范围,这听起来不利于用户体验
为此,您需要创建一个继承自NumericUpDown的控件,并重写OnKeyPress/OnKeyDown方法。根据您允许的值范围,这听起来不利于用户体验
要执行此操作,您需要使用inherits from NumericUpDown创建一个控件,并重写OnKeyPress/OnKeyDown方法。要禁用用户编辑,请将Readonly属性设置为true
updown.ReadOnly = true;
有关更多裁剪,请参阅此项。若要禁用用户编辑,请将Readonly属性设置为true
updown.ReadOnly = true;
有关更多裁剪,您可以使用
updown.ReadOnly=True代码>对我不起作用。这似乎是一个反复出现的错误。
但是捕获任何更改,然后撤消它。为此,将函数updown\u ValueChanged()
绑定到updown.ValueChanged
属性
decimal spin = 1;
private void updown_ValueChanged(object sender, EventArgs e)
{
if (updown.ReadOnly)
{
if (updown.Value != spin)
{
updown.Value = spin;
}
}
else spin = updown.Value;
}
使用updown.ReadOnly=True代码>对我不起作用。这似乎是一个反复出现的错误。
但是捕获任何更改,然后撤消它。为此,将函数updown\u ValueChanged()
绑定到updown.ValueChanged
属性
decimal spin = 1;
private void updown_ValueChanged(object sender, EventArgs e)
{
if (updown.ReadOnly)
{
if (updown.Value != spin)
{
updown.Value = spin;
}
}
else spin = updown.Value;
}
杰米,听起来确实很糟糕。我遇到的真正问题是每次更改numericupdown值时都需要触发valuechanged事件,但事实并非如此。它仅在使用“向上”和“向下”按钮时激发,而不是在使用键盘更改其值时激发。这就是为什么我在寻找一种方法来确保valuechanged事件在每次更改其值时都会激发。据我所知,valuechanged事件在控件失去焦点时激发?这还不够吗?嗯,我刚刚测试了控件,它的工作原理与您描述的完全相同,这是不够的。根据您告诉我的,用户必须单击其他控件或winform本身,才能使numericupdown控件失去焦点。因此,valuechanged事件可以触发。如果他们只想更改winform上单个numericupdown控件的值,然后单击OK按钮关闭winform,该怎么办。另外,OK按钮被禁用,并且只有在valuechanged事件触发时才会启用。您可以从控件继承并触发ValueChanged
事件,然后在任何OnKeyPress/OnKeyDown/OnKeyUp方法中设置值?Jamie,这是真的,但我正在寻找一个简单的解决方案,它不需要我编写额外的代码。Jamie,听起来确实很糟糕。我遇到的真正问题是每次更改numericupdown值时都需要触发valuechanged事件,但事实并非如此。它仅在使用“向上”和“向下”按钮时激发,而不是在使用键盘更改其值时激发。这就是为什么我在寻找一种方法来确保valuechanged事件在每次更改其值时都会激发。据我所知,valuechanged事件在控件失去焦点时激发?这还不够吗?嗯,我刚刚测试了控件,它的工作原理与您描述的完全相同,这是不够的。根据您告诉我的,用户必须单击其他控件或winform本身,才能使numericupdown控件失去焦点。因此,valuechanged事件可以触发。如果他们只想更改winform上单个numericupdown控件的值,然后单击OK按钮关闭winform,该怎么办。另外,OK按钮被禁用,并且只有在valuechanged事件触发时才会启用。您可以从控件继承并触发ValueChanged
事件,并在任何OnKeyPress/OnKeyDown/OnKeyUp方法中设置值?Jamie,这是真的,但我正在寻找一个简单的解决方案,它不需要我编写额外的代码。