在 ToolStripButton.Click 事件之前处理 NumericUpDown.ValueChanged 事件
Handle NumericUpDown.ValueChanged event before ToolStripButton.Click event
我有一个带有 NumericUpDown
和 ToolStripButton
的表格。
在 NumericUpDown
s ValueChanged
事件处理程序中,某些对象实例的值已更改。
在 ToolStripButton
s Click
事件处理程序中保存对象实例。
现在的问题是,如果我重写 NumericUpDown
中的值,然后单击 ToolStripButton
保存状态,ToolStripButton
s Click
事件是在 之前 触发了 NumericUpDown
s 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
,处理 NumericUpDown
的 Validated
事件,并且还在 ToolStripButton
的 Click
事件处理程序中调用 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
方法的结果
我有一个带有 NumericUpDown
和 ToolStripButton
的表格。
在 NumericUpDown
s ValueChanged
事件处理程序中,某些对象实例的值已更改。
在 ToolStripButton
s Click
事件处理程序中保存对象实例。
现在的问题是,如果我重写 NumericUpDown
中的值,然后单击 ToolStripButton
保存状态,ToolStripButton
s Click
事件是在 之前 触发了 NumericUpDown
s 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
,处理 NumericUpDown
的 Validated
事件,并且还在 ToolStripButton
的 Click
事件处理程序中调用 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
方法的结果