2014-03-05 36 views
0

我對Android應用程序使用Marco Cantu's ShowModal example。你是如何處理的mrCancelDelphi Android應用程序 - 使用ShowModal表格處理mrCancel

這裏是我的代碼:

procedure TForm1.Button1Click(Sender: TObject); 
var 
Form2: TForm2; 
begin 
Form2 := TForm2.Create(nil); 
Form2.ShowModal(
    procedure(ModalResult: TModalResult) 
    begin 
     if ModalResult = mrOK then 
     begin 
     ShowMessage('OK'); 
     Form2.DisposeOf; 
     end 
    { else 
     begin 
     ShowMessage('Cancel'); 
     Form2.DisposeOf; 
     end;} 
     end); 
end; 

如何處理mrCancel?如果我有一個帶有控件的表單,用戶必須輸入數據,我想讓他們選擇取消表單並返回主表單。

我應該注意到,我將modalresult分配給mrCancel作爲取消按鈕,就像我爲輔助表單上的OK按鈕執行mrOK操作一樣。 OK按鈕工作正常,但如果我點擊取消按鈕,該應用程序不做任何事情,使它,所以我不能再次單擊確定按鈕。

我本來認爲我可以做以下

var 
Form2: TForm2; 
begin 
Form2 := TForm2.Create(nil); 
Form2.ShowModal(
    procedure(ModalResult: TModalResult) 
    begin 
     if ModalResult = mrOK then 
     begin 
     ShowMessage('OK'); 
     Form2.DisposeOf; 
     end 
     end); 
end; 

,我應該已經能夠mrCancel分配到取消按鈕的modalresult財產 - 但它不工作

回答

3

你有撥打DisposeOf()不管ModalResult是什麼。您目前只在結果爲mrOk時纔會打電話。做到這一點,而不是:

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Form2: TForm2; 
begin 
    Form2 := TForm2.Create(nil); 
    Form2.ShowModal(
    procedure(ModalResult: TModalResult) 
    begin 
     if ModalResult = mrOK then 
     ShowMessage('OK') 
     else 
     ShowMessage('Cancel'); 
     Form2.DisposeOf; 
    end 
); 
end; 
+0

你的第二個解決方案是行不通的。取消showmessage在模態對話框表單之前顯示。然後單擊對話框上的任一按鈕(確定或取消)即可終止整個應用程序。知道爲什麼它首先調用這部分代碼會很有趣。第一個解決方案似乎可行,但我需要更多地進行測試。 – LuvRAD

+0

主窗體上的showmodals導致問題!我擺脫了他們,它似乎現在工作正常 – LuvRAD

+1

請參閱[關閉模式對話框在德爾福firemonkey手機應用程序(Android)](http://stackoverflow.com/a/26875930/576719)爲正確的模式如何關閉一個在FireMonkey中的模式形式。代替DisposeOf,在模式對話框的OnClose事件中設置「Action:= TCloseAction.caFree;」。 –