我需要确定 NumericUpDown 控件的值是否被mouseUp 事件更改。
当 numericupdown 的值发生变化时,我需要调用一个昂贵的函数。我不能只使用“ValueChanged”,我需要使用 MouseUp 和 KeyUp 事件。
基本上,我需要知道:
当用户放开鼠标时 numericUpDown 的值是否发生了变化? 如果单击任何未以红色突出显示的区域,则答案是否定的。我需要在任何地方但单击红色区域时忽略鼠标向上事件。
如何通过代码确定这一点?我觉得事件有点混乱。
这将在用户释放鼠标按钮时触发。您可能想调查释放了哪个鼠标按钮。
编辑
decimal numvalue = 0;
private void numericUpDown1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left && numvalue != numericUpDown1.Value)
{
//expensive routines
MessageBox.Show(numericUpDown1.Value.ToString());
}
numvalue = numericUpDown1.Value;
}
编辑 2 这将确定鼠标左键是否仍然按下,如果它在执行昂贵的例程之前退出,对键盘按钮按下没有帮助。
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
if ((Control.MouseButtons & MouseButtons.Left) == MouseButtons.Left)
{
return;
}
//expensive routines
}
编辑 3
将有助于解决 Any 键,尽管我认为唯一重要的是箭头键
问题 - 我需要在任何地方但单击红色区域时忽略鼠标向上事件。
派生一个自定义数值控件,如下所示。获取 Numeric Control 的 TextArea 并忽略 KeyUp。
class UpDownLabel : NumericUpDown
{
private Label mLabel;
private TextBox mBox;
public UpDownLabel()
{
mBox = this.Controls[1] as TextBox;
mBox.Enabled = false;
mLabel = new Label();
mLabel.Location = mBox.Location;
mLabel.Size = mBox.Size;
this.Controls.Add(mLabel);
mLabel.BringToFront();
mLabel.MouseUp += new MouseEventHandler(mLabel_MouseUp);
}
// ignore the KeyUp event in the textarea
void mLabel_MouseUp(object sender, MouseEventArgs e)
{
return;
}
protected override void UpdateEditText()
{
base.UpdateEditText();
if (mLabel != null) mLabel.Text = mBox.Text;
}
}
在 MainForm 中,使用此控件更新您的设计器,即UpDownLabel
:-
private void numericUpDown1_MouseUp(object sender, MouseEventArgs e)
{
MessageBox.Show("From Up/Down");
}
引用自 - https://stackoverflow.com/a/4059473/763026并处理了 MouseUp 事件。
现在,使用此控件而不是标准控件并挂钩 KeyUp 事件。当您单击微调器 [Up/Down 按钮,这又是从 UpDownBase 派生的不同控件] 时,您将始终仅从 Up/Down 按钮获得 KeyUp 事件,即红色区域。
我认为你应该使用Leave
事件,当NumericUpDown
控制焦点消失时,它会调用。
int x = 0;
private void numericUpDown1_Leave(object sender, EventArgs e)
{
x++;
label1.Text = x.ToString();
}