2013-09-23 77 views
4

在Delphi 2010中,我創建一個表單,然後創建一個TFrame,將TFrame.Parent分配給表單,然後顯示錶單MODALLY。工作正常...框架有一個DBNavigator,一個字段DBFields等。當用戶點擊發布/保存時,我想自動關閉表單。我已經嘗試了一些東西,例如Close,Action = caFree,(DBNav.parent.parent)作爲TForm.Free等等,但似乎沒有任何工作。我如何 - 從TFrame內關閉表格?德爾福 - 如何關閉窗體內的TFrame內的窗體?

代碼來創建這個東西......

// Create the Window 
    ThisWin := TEmptyFrameWin.Create(nil); 

    // Create the Frame for the Window 
    ThisFrame := TFrameUsage.Create(Application); 

    ThisFrame.Parent := ThisWin; 

    // Load the data 
    ThisFrame.tUsage.Open; 
    ThisFrame.tUsage.FindKey([StrToInt(ID)]); 
    ThisFrame.LoadDateFields; 

    ThisWin.Caption := 'Change Appointment Information'; 
    // Only show the POST button  
    ThisFrame.UsageNav.VisibleButtons := [sbPost]; 

    try 
    ThisWin.ShowModal; 
    finally 
    ThisWin.Free; 
    end; 

感謝,

GS

+1

使用'釋放'而不是'免費'爲TForm的子類。 –

+1

這裏沒有必要,@馬庫斯。 「釋放」用於表單從表單的消息處理程序或其控件之一中銷燬。從這裏顯示的代碼中,表單在'Free'被調用時處理任何消息是不可能的,所以一切都很好。 –

回答

8

從框架類中的方法,你可以通過調用GetParentForm到達主機形式。所以,以下將滿足您的需求:

GetParentForm(Self).Close; 
+0

這樣做。謝謝。 – user1009073

+0

+1不知道這個功能。我自己爲不同的項目實施了幾次。謝謝! – jpfollenius

+0

這就是OP所要求的,但是如果我是代碼審查OP的代碼,我會說「這很糟糕」。讓框架有一個OnRequestClose屬性/事件(真的是一個回調),並讓擁有者形式決定是否關閉,以及在關閉之前要做什麼邏輯,甚至是否連接回調。 –

相關問題