【发布时间】:2019-05-29 09:17:38
【问题描述】:
我有一个带有NumericUpDown 和ToolStripButton 的表单。
在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 控件,则不会。
【问题讨论】:
-
重载
Foo.Save(),所以它接受一个十进制参数:Foo.Save(decimal value);。原始的无参数Foo.Save()可以直接调用Save(this.Value)。在ToolStripButton1_Click中,您可以调用Foo.Save(numericUpDown1.Value),这样它将保存当前手动编辑的值。 -
这真的很有趣。因此,如果我使用
numericUpDown1.Value,它将刷新它的值并立即触发ValueChanged事件,因此在获得numericUpDown1.Value之后,我还可以从_foo.Value获得正确的值。 -
是的。获取当前值后,事件序列将恢复为标准行为,因此在您获得编辑值后立即引发
ValueChanged。
标签: c# winforms user-interface toolstripbutton