对话框结果设置 Return 值

Dialog Result Set the Return Value

我在表单上创建了一个按钮,我以编程方式为其设置了一个 return 值,如下所示。首先是事件处理程序 psudocode,然后是对话结果 returned 到的位置。

默认 属性 可以在用户界面中设置按钮的 return 行为,即对话框结果行为。在我的完整代码中,我看不到设置或修改此按钮的 return 的任何地方。

在测试时(运行 在调试模式下)第一次在代码执行期间使用 buttonSaveSet_Click 事件处理程序 returned 对话框结果值为 "Cancel" 尽管我点击了 "Set" 按钮。但是,我第二次执行该功能时,按下同一个按钮,对话框结果 returned 为 "Yes"。

似乎还有另一个地方正在修改对话框结果,我在错误的位置设置了该值。

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();
    }

return 位置:

              try
        {
            DialogResult dResult = setValPopup.ShowDialog();
            SetChars sc = setValPopup.setChars;
            int max;

            if ( dResult == DialogResult.Yes )
            {
                if ( sc.set == true )
                {
                   //do other work
                }
            }
        }

基于您描述的行为。您可能已经在设计器上设置了 DialogResult 属性 集,因此第一次执行时,它会运行在设计器上设置的任何值,并且在接下来的执行中,它会正确运行你期待

看看你的设计师,你就会发现问题。

您应该将表单的 DialogResult 属性 设置为退出。 DialogResult.None 以外的任何值都将强制关闭表单,并且 return 任何您设置为 DialogResult 的值(在表单上,​​而不是在按钮上)

private void buttonSaveSet_Click( object sender , EventArgs e )
{
    setChars = new setChars();
    this.DialogResult = DialogResult.Yes;
    ....
    // No need to call Close here
    // Close();
}

您观察到的行为可能是因为表单引擎在进入点击事件之前检查了按钮的 DialogResult 属性 并且预计不会在事件退出时再次重新评估它.因此,您第一次单击会在按钮上设置 属性,在第二次单击时,表单引擎会注意到按钮上的 属性,然后一切都会关闭。