2011-11-01 136 views
5

我有一个自定义的对话框winform。在它上面我有一个标签,文本框和2个按钮(确定并取消)。它还声明和定义了用于传递不同参数列表的超载方法执行为什么ShowDialog总是返回DialogResult.Cancel?

var theDialog := new InputMsgBox; 

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

对话框的Winform执行所定义如下:

对话框的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; 

当执行方法返回给调用者,它总是返回DialogResult.Cancel即使你点击OKBtn。

按钮的dialogresult被相应地设置。

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

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

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

回答

8

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

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

不是删除问题,而是回答问题,我觉得它会帮助别人。

5

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

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

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

+0

@ Joe当你点击它时,不是应该设置DialogResult窗体的按钮之一吗?我确定将OKBtn按钮(AcceptButton)设置为DialogResult.Ok并将CancelBtn按钮(CancelButton)设置为DialogResult.Cancel。我已经通过MSDN库并遵循他们的示例。不过,它总是返回DialogResult.Cancel。 – ThN

相关问题