6

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

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 execute 定义如下:

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方法返回给调用者时,它总是返回DialogResult.Cancel,即使你点击OKBtn。

Buttons 的 dialogresult 相应设置。

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

我不明白为什么 showdialog 方法总是返回 DialogResult.Cancel。

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

4

2 回答 2

9

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

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

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

于 2011-11-02T14:58:52.923 回答
6

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

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

我想DialogResult.Cancel是默认的,你永远不会改变它。

于 2011-11-01T20:50:23.043 回答