2011-11-01 133 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

相關問題