我需要确定NumericUpDown控件的值是否由mouseUp事件更改。
当numericupdown的值发生变化时,我需要调用一个昂贵的函数。我不能只使用“ValueChanged”,我需要使用MouseUp和KeyUp事件。
基本上,我需要知道:
当用户放开时,numericUpDown的值是否会发生变化 老鼠? 如果点击任何未以红色突出显示的区域,则显示 答案是否定的。我需要IGNORE鼠标注册事件,当任何地方,但点击红色区域。
如何通过代码确定?我发现事件有点令人困惑。
答案 0 :(得分:2)
当用户释放鼠标按钮时会触发。您可能想要调查哪个鼠标按钮被释放。
编辑
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
How to detect the currently pressed key?
将帮助解决Any键,虽然我认为唯一重要的是箭头键
答案 1 :(得分:2)
问题 - 我需要点击鼠标按钮事件,当有任何地方但点击了红色区域时。
导出自定义数字控件,如下所示。获取数字控件的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事件。您将始终从“向上/向下”按钮获取KeyUp事件,即单击 RED AREA 微调器[向上/向下按钮,这又是一个不同的控件派生 来自UpDownBase]。
答案 2 :(得分:1)
我认为您应该使用Leave
事件,当NumericUpDown
控件的焦点消失时,它会调用。
int x = 0;
private void numericUpDown1_Leave(object sender, EventArgs e)
{
x++;
label1.Text = x.ToString();
}