为什么ShowDialog总是返回DialogResult.Cancel?

时间:2011-11-01 19:17:51

标签: .net dialog return-value delphi-prism dialogresult

我有一个自定义对话框winform。在它上面我有一个标签,文本框和2个按钮(确定和取消)。它还声明并定义了重载的 execute 方法,用于传递不同的参数列表。

Dialog Winform的调用方式如下:

var theDialog := new InputMsgBox;

if theInputB.Execute('Awesome StackOverflow','Enter Text?',s,var s) = DialogResult.OK then
begin
  Invalidate;
  SetText(s);
end;

Dialog Winform执行定义如下:

method InputMsgBox.Execute(Title, theMessage, defaultanswer:string;var thevalue:string): DialogResult;
begin
    result := DialogResult.Cancel;

    Requesttext.Text:=themessage;
    Requesttext.Enabled:=true;
    Requesttext.Visible:=true;
    InputTextBox.Text:=defaultanswer;
    InputTextBox.Enabled:=true;
    InputTextBox.Visible:=true;

    CancelBtn.Enabled:=true;
    CancelBtn.Visible:=true;
    Okbtn.Enabled:=true;
    Okbtn.Visible:=true;

    self.ShowDialog;
    Result := self.DialogResult;
    thevalue:=InputTextBox.Text;
end;

当execute方法返回给调用者时,即使单击OKBtn,它也总是返回DialogResult.Cancel。

按钮'对话框相应地设置。

我在Dialog winform上设置了AcceptButton和CancelButton。

我无法弄清楚为什么showdialog方法总是返回DialogResult.Cancel。

UPDATE 在做了一些测试之后,我发现通过调用showdialog = DialogResult.Ok显示我的其他自定义对话框窗口工作正常。所以,我检查了它们两个以查看它们的属性设置是否存在一些差异,并且绝对没有区别。我不明白。 提前谢谢,

2 个答案:

答案 0 :(得分:8)

我发现了我的问题。这就是Dialog Form始终返回Cancel DialogResult的原因。对于我自定义的对话窗口,我还实现了Form_Closing事件方法。显然,当使用ShowDialog方法打开对话框时,您不会有一个会使程序计数器跳出其步骤的事件。因此,在它有机会阅读其DialogResult之前,它已经关闭。因此,我的程序只看到对话窗口的默认DialogResult。

一旦我删除了Form_Closing事件方法,它就按照预期的方式工作。

我没有删除这个问题,而是回答它,我觉得它会帮助别人。

答案 1 :(得分:6)

您应该设置不同的DialogResult - 例如,将DialogResult的{​​{1}}属性设置为AcceptButton

或者以编程方式设置它,通常在按钮事件处理程序中。

我认为DialogResult.OK是默认设置,您永远不会更改它。