1

我有一个带有NumericUpDown和 的表格ToolStripButton

NumericUpDownsValueChanged事件处理程序中,某些对象实例的值被更改。

ToolStripButtonsClick事件处理程序中,对象实例被保存。

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

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控件则不会。

4

1 回答 1

1

作为一个选项,在保存之前调用,而不是ValueChanged处理Validated的事件,NumericUpDown并且也在 的Click事件处理程序中ToolStripButton调用: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为它们设置,你需要Validate在调用之前检查方法的结果Save,使用if(this.Validate()){ /*...*/ }

于 2019-05-30T01:30:49.430 回答