我有一个自定义对话框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 回答
我想出了我的问题 . 这就是Dialog Form始终返回Cancel DialogResult的原因 . 对于我自定义的对话窗口,我还实现了Form_Closing事件方法 . 显然,当使用ShowDialog方法打开对话框时,您不会有一个会使程序计数器跳出其步骤的事件 . 所以,它在有机会阅读其DialogResult之前就已经关闭了 . 因此,我的程序只看到了对话窗口的默认DialogResult .
一旦我删除了Form_Closing事件方法,它就按照预期的方式工作 .
我没有删除问题,而是回答它,我觉得它会帮助别人 .
您应该设置不同的
DialogResult
- 例如,通过将AcceptButton
的DialogResult
属性设置为DialogResult.OK
.或者以编程方式设置它,通常在按钮事件处理程序中 .
我想
DialogResult.Cancel
是默认值,你永远不会改变它 .