【问题标题】:Dialog Result Set the Return Value对话框结果设置返回值
【发布时间】:2017-06-04 12:32:50
【问题描述】:

我在表单上创建了一个按钮,我以编程方式为其设置了返回值,如下所示。首先是事件处理程序 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 在执行 OnClick 之前而不是之后复制到 form.DialogResult。在关闭表单之前更改它为时已晚。尝试设置 form.DialogResult 而不是 button.DialogResult.

标签: c# .net dialogresult


【解决方案1】:

您应该将表单的 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 属性,并且预计不会在退出事件时再次重新评估它。因此,您的第一次单击设置按钮上的属性,在第二次单击时,表单引擎会记录按钮上的属性并且一切都关闭。

【讨论】:

  • 史蒂夫,做到了。感谢您的帮助。我最终删除了 close() 方法,返回的结果是“是”,正如我预期的那样。这是我怀疑的一件事,在价值变化之前关闭的表格已经记录了,但我并没有做太多。
【解决方案2】:

根据您描述的行为。很可能您已经在设计器上设置了 DialogResult 属性集,所以它第一次执行时,它会运行在设计器上设置的任何值,并且在接下来的执行中,它会按照您的预期正确运行。

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

【讨论】:

  • 我最初也是这么想的。我查看了设计器,没有发现任何可以修改结果的东西。当我使用用户界面设置返回值时,添加了一行代码“this.buttonSaveSet.DialogResult = System.Windows.Forms.DialogResult.Yes;”修改了对话结果。也许这就是你的意思?不过感谢您的回答!感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多