为什么ShowDialog总是返回dialesult . cancel



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

对话框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方法返回给调用者时,它总是返回dialog sult。取消,即使你点击OKBtn。

按钮的对话框结果相应设置。

我已经设置了接受按钮和取消按钮的对话框窗体。

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

UPDATE经过一些测试,我发现我的其他定制对话框窗口在调用showdialog = dialgresult . ok显示时工作正常。我检查了它们两个,看它们的属性设置是否有区别,绝对没有区别。我不明白。提前感谢,

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

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

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

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

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

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

最新更新