我在窗体上创建了一个按钮,我以编程方式为其设置了返回值,如下所示。首先是事件处理程序 psudocode,然后是对话框结果返回到的位置。
有一个默认属性,可以在用户界面中设置按钮的返回行为,即对话框结果行为。在我的完整代码中,我看不到此按钮的返回被设置或修改的任何地方。
在测试(在调试模式下运行)时,第一次在代码执行期间使用 buttonSaveSet_Click 事件处理程序时,返回的对话框结果值为"取消",尽管我单击了"设置"按钮。但是,当我第二次执行该函数时,通过按相同的按钮,对话框结果返回为"是"。
似乎还有另一个地方正在修改对话框结果,并且我在不正确的位置设置了该值。
psudo code
private void buttonSaveSet_Click( object sender , EventArgs e )
{
setChars = new setChars();
//set the dr to yes.
buttonSaveSet.DialogResult = DialogResult.Yes;
// set the charCount
// set the rowCount
if ( conditional statement is true )
{
//return values;
}
else
{
//return nothing;
}
Close();
}
回程地点:
try
{
DialogResult dResult = setValPopup.ShowDialog();
SetChars sc = setValPopup.setChars;
int max;
if ( dResult == DialogResult.Yes )
{
if ( sc.set == true )
{
//do other work
}
}
}
应将窗体的 DialogResult 属性设置为退出。除 DialogResult.None 之外的任何值都将强制窗体关闭并返回您设置为 DialogResult 的任何内容(在窗体上,而不是在按钮上)
private void buttonSaveSet_Click( object sender , EventArgs e )
{
setChars = new setChars();
this.DialogResult = DialogResult.Yes;
....
// No need to call Close here
// Close();
}
您观察到的行为是由于以下事实:表单引擎可能在进入单击事件之前检查按钮的 DialogResult 属性,并且预计不会在退出事件时再次重新评估它。因此,您的第一次单击设置按钮上的属性,第二次单击按钮上的属性由表单引擎记录,并且所有内容都会关闭。
基于您描述的行为。您可能已经在设计器上设置了 DialogResult
属性集,因此在第一次执行时,它会运行在设计器上设置的任何值,并且在后续执行中,它会按预期正确运行。
看看你的设计师,你会发现问题所在。