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

6

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

对话框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。

按钮的dialogresult已相应设置。

我在对话框winform上设置了AcceptButton和CancelButton。

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

更新经过一些测试,我发现我的其他自定义对话框窗口通过调用showdialog = DialogResult.Ok显示时工作正常。因此,我检查了它们两个,看看它们的属性设置是否有所不同,但实际上没有任何区别。我不理解它。

2个回答

10
我解决了我的问题,这就是为什么对话框窗体总是返回取消DialogResult。对于我自定义的对话框窗口,我还实现了Form_Closing事件方法。显然,当使用ShowDialog方法打开对话框时,您不能有一个事件将程序计数器跳出其步骤。因此,在有机会读取其DialogResult之前,它已经关闭了。因此,我的程序只看到了对话框窗口的默认DialogResult。
一旦我删除了Form_Closing事件方法,它就按照预期工作了。
我不是要删除这个问题,而是要回答它,并且我认为它将帮助其他人。

6

您应该设置不同的DialogResult - 例如,通过将AcceptButtonDialogResult属性设置为DialogResult.OK

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

我想DialogResult.Cancel是默认值,并且您从未更改过它。


@ Joe,其中一个按钮不是应该在单击时设置表单的DialogResult吗?我已经将OKBtn按钮(AcceptButton)设置为DialogResult.Ok,将CancelBtn按钮(CancelButton)设置为DialogResult.Cancel。我已经查阅了MSDN库并遵循了他们的示例。但它总是返回DialogResult.Cancel。 - ThN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接