对话框结果设置返回值

时间:2017-01-19 17:29:01

标签: c# .net dialogresult

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

有一个默认属性,可以在用户界面中设置按钮的返回行为,即对话结果行为。在我的完整代码中,我无法在任何地方看到此按钮的返回被设置或修改。

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

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

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
                }
            }
        }

2 个答案:

答案 0 :(得分:0)

根据您要描述的行为。您可能已在设计器上设置了angular not defined属性集,因此第一次执行时,它会运行在设计器上设置的任何值,并且在以下执行中,它会按预期正确运行。 / p>

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

答案 1 :(得分:0)

您应该将表单的DialogResult属性设置为exit。除了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();
}

您观察到的行为是由于表单引擎可能在进入click事件之前检查按钮的DialogResult属性,并且不希望在事件退出时再次重新评估它。因此,您的第一次单击设置按钮上的属性,在第二次单击时,按钮上的属性由表单引擎记录,一切都关闭。