在 ToolStripButton.Click 事件之前处理 NumericUpDown.ValueChanged 事件

Handle NumericUpDown.ValueChanged event before ToolStripButton.Click event

我有一个带有 NumericUpDownToolStripButton 的表格。

NumericUpDowns ValueChanged 事件处理程序中,某些对象实例的值已更改。

ToolStripButtons Click 事件处理程序中保存对象实例。

现在的问题是,如果我重写 NumericUpDown 中的值,然后单击 ToolStripButton 保存状态,ToolStripButtons Click 事件是在 之前 触发了 NumericUpDowns ValueChanged 事件,所以我首先保存实例,然后更改它。

public partial class Form2 : Form
{
    private Foo _foo = new Foo();

    public Form2()
    {
        InitializeComponent();
    }

    private void NumericUpDown1_ValueChanged(object sender, EventArgs e)
    {
        _foo.Value = numericUpDown1.Value;
    }

    private void ToolStripButton1_Click(object sender, EventArgs e)
    {
        _foo.Save();
    }

    private class Foo
    {
        public decimal Value { get; set; }

        public void Save()
        {
            //Save the value...
        }
    }
}

解决这个问题的最佳方法是什么?
如果我使用 Button 控件,这些事件将以正确的顺序触发,但如果我使用 ToolStripButton 控件则不会。

作为一个选项,代替 ValueChanged,处理 NumericUpDownValidated 事件,并且还在 ToolStripButtonClick 事件处理程序中调用 this.Validate() 保存前:

private void NumericUpDown1_Validated(object sender, EventArgs e)
{
    _foo.Value = numericUpDown1.Value;
}

private void ToolStripButton1_Click(object sender, EventArgs e)
{
    this.Validate();
    _foo.Save();
}

注意:如果窗体上还有其他控件可能有Validating事件,你可以为它们设置e.Cancel = true,你需要检查使用 if(this.Validate()){ /*...*/ }.

调用 Save 之前 Validate 方法的结果