“MouseUp”事件是否更改了NumericUpDown的值?

时间:2012-06-11 13:12:37

标签: c# .net winforms events

我需要确定NumericUpDown控件的值是否由mouseUp事件更改

当numericupdown的值发生变化时,我需要调用一个昂贵的函数。我不能只使用“ValueChanged”,我需要使用MouseUp和KeyUp事件。

enter image description here

基本上,我需要知道:

  

当用户放开时,numericUpDown的值是否会发生变化   老鼠? 如果点击任何未以红色突出显示的区域,则显示   答案是否定的。我需要IGNORE鼠标注册事件,当任何地方,但点击红色区域。

如何通过代码确定?我发现事件有点令人困惑。

3 个答案:

答案 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();
    }