C# 在ToolStripButton之前处理NumericUpDown.ValueChanged事件。单击事件
我有一个带有C# 在ToolStripButton之前处理NumericUpDown.ValueChanged事件。单击事件,c#,winforms,user-interface,toolstripbutton,C#,Winforms,User Interface,Toolstripbutton,我有一个带有NumericUpDown和ToolStripButton的表单 在NumericUpDownsValueChanged事件处理程序中,某些对象实例的值已更改 在ToolStripButtons单击事件处理程序中,保存对象实例 现在的问题是,如果我重写NumericUpDown中的值,然后单击ToolStripButton保存状态,ToolStripButtonsclick事件在NumericUpDownsValueChanged事件之前触发我改变了它 public partial
NumericUpDown
和ToolStripButton
的表单
在NumericUpDown
sValueChanged
事件处理程序中,某些对象实例的值已更改
在ToolStripButton
s单击事件处理程序中,保存对象实例
现在的问题是,如果我重写NumericUpDown
中的值,然后单击ToolStripButton
保存状态,ToolStripButton
sclick
事件在NumericUpDown
sValueChanged
事件之前触发我改变了它
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...
}
}
}
解决这个问题的最佳方法是什么?
如果我使用按钮
控件,这些事件将按正确的顺序触发,但如果我使用ToolStripButton
控件,则不会触发这些事件。作为选项,而不是值更改
,处理数值上下
的已验证
事件,并在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();
}
注意:如果表单上的其他控件可能有验证
事件,并且您可以为它们设置e.Cancel=true
,则在调用保存
之前,需要使用If(this.Validate()){/*…*}
重载Foo.Save()
,检查方法的结果,因此它接受一个十进制参数:Foo.Save(十进制值)代码>。原始的、无参数的Foo.Save()
只需调用Save(this.Value)
。在ToolStripButton1\u单击
然后可以调用Foo.Save(numericUpDown1.Value)
,这样它将保存当前手动编辑的值。这真的很有趣。因此,如果我使用numericUpDown1.Value
它将刷新其值,并立即触发ValueChanged
事件,因此在获取numericUpDown1.Value
之后,我还可以从\u foo.Value
中获取正确的值。获取当前值时,事件序列将恢复为标准行为,因此在获取编辑的值后立即引发ValueChanged
。此解决方案有效。我已经尝试调用验证
,但仅针对数值上下
调用,结果无效。知道为什么它适用于整个表单
,但不适用于指定的控件吗?@Artholl我的期望是,通过调用NumericUpdown
的Validate
方法并处理Validated
事件,可以得到相同的结果;但我还没试过。