如何在 valuechanged 事件之前获取 NumericUpDown 的文本?
How to get text of NumericUpDown before valuechanged event?
我想让它这样工作:当我写入 NumericUpDown 1k 时,值应该是 1000,当我写入 4M 时,值应该是 4000000。我怎样才能做到?
我试过这个:
private void NumericUpDown1_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyValue == (char)Keys.K)
{
NumericUpDown1.Value = NumericUpDown1.Value * 1000;
}
}
但它适用于我写的原始值。
我想让它像宏指令一样工作。例如,如果我想得到 NUD1.Value 1000,我写 1 然后,当我按 K 时 NUD1.Value 变成 1000。
假设我们有一个名为 numericUpDown1
的 NumericUpDown。每当用户按下 k 时,我们要将 NUP 的当前值乘以 1,000,如果用户按下 m,则当前值应该乘以 1,000,000。我们也不希望原始值触发 ValueChanged
事件。因此,我们需要有一个 bool
变量来指示该值正在更新。
这是一个完整的例子:
private bool updatingValue;
private void numericUpDown1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData != Keys.K && e.KeyData != Keys.M) return;
int multiplier = (e.KeyData == Keys.K ? 1000 : 1000000);
decimal newValue = 0;
bool overflow = false;
try
{
updatingValue = true;
newValue = numericUpDown1.Value * multiplier;
}
catch (OverflowException)
{
overflow = true;
}
updatingValue = false;
if (overflow || newValue > numericUpDown1.Maximum)
{
// The new value is greater than the NUP maximum or decimal.MaxValue.
// So, we need to abort.
// TODO: you might want to warn the user (or just rely on the beep sound).
return;
}
numericUpDown1.Value = newValue;
numericUpDown1.Select(numericUpDown1.Value.ToString().Length, 0);
e.SuppressKeyPress = true;
}
ValueChanged
事件处理程序应该是这样的:
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
if (updatingValue) return;
// Simulating some work being done with the value.
Console.WriteLine(numericUpDown1.Value);
}
我想让它这样工作:当我写入 NumericUpDown 1k 时,值应该是 1000,当我写入 4M 时,值应该是 4000000。我怎样才能做到? 我试过这个:
private void NumericUpDown1_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyValue == (char)Keys.K)
{
NumericUpDown1.Value = NumericUpDown1.Value * 1000;
}
}
但它适用于我写的原始值。
我想让它像宏指令一样工作。例如,如果我想得到 NUD1.Value 1000,我写 1 然后,当我按 K 时 NUD1.Value 变成 1000。
假设我们有一个名为 numericUpDown1
的 NumericUpDown。每当用户按下 k 时,我们要将 NUP 的当前值乘以 1,000,如果用户按下 m,则当前值应该乘以 1,000,000。我们也不希望原始值触发 ValueChanged
事件。因此,我们需要有一个 bool
变量来指示该值正在更新。
这是一个完整的例子:
private bool updatingValue;
private void numericUpDown1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData != Keys.K && e.KeyData != Keys.M) return;
int multiplier = (e.KeyData == Keys.K ? 1000 : 1000000);
decimal newValue = 0;
bool overflow = false;
try
{
updatingValue = true;
newValue = numericUpDown1.Value * multiplier;
}
catch (OverflowException)
{
overflow = true;
}
updatingValue = false;
if (overflow || newValue > numericUpDown1.Maximum)
{
// The new value is greater than the NUP maximum or decimal.MaxValue.
// So, we need to abort.
// TODO: you might want to warn the user (or just rely on the beep sound).
return;
}
numericUpDown1.Value = newValue;
numericUpDown1.Select(numericUpDown1.Value.ToString().Length, 0);
e.SuppressKeyPress = true;
}
ValueChanged
事件处理程序应该是这样的:
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
if (updatingValue) return;
// Simulating some work being done with the value.
Console.WriteLine(numericUpDown1.Value);
}