2013-03-06 56 views
2

運行我編譯的程序時出現錯誤。爲了防止在隱藏或聚焦之前啓用表單等錯誤,我已採取一切可以預防的措施。該應用程序顯示一個DimmerForm(灰色漸變疊加),然後顯示疊加層的NewFileForm ontop。 NewFileForm完成它的工作並確定要創建的文件,並在MainForm的頁面控件中創建一個新的標籤頁並顯示新創建的標籤頁。所有這些工作到目前爲止(我可以在NewFileForm關閉之前打破併發生任何錯誤,並看到選項卡表已成功創建並顯示)。 NewFileForm然後關閉,再次正常工作。Delphi錯誤:「無法關注禁用或隱藏的窗口」

當任何事情都嘗試將焦點設置回MainForm時,會發生錯誤。隱藏DimmerForm,或單擊MainForm,或通過代碼將焦點設置到MainForm都會導致發生錯誤消息。將代碼放在{try,except,end}中也不會阻止錯誤消息。我在代碼中搜索了可能由MainForm聚焦觸發的所有其他方法,並且在錯誤發生之前沒有輸入任何方法(因此不能導致它)。

我在之前版本的應用程序中編寫了幾乎完全相同的代碼,然後決定從頭開始重構所有代碼。該應用程序的以前版本與表單重點工作沒有任何關係。

這裏是打開NewFileForm的代碼;

procedure TMainForm.NewFilesToolButtonClick(Sender: TObject); 
begin 

    ShowDimmer; 
    NewFileForm.ShowModal; 
    HideDimmer; 

end; 

這裏是顯示調光表格的代碼;

procedure ShowDimmer; 
begin 

    // Enable to prevent errors 
    DimmerForm.Enabled := true; 

    // Hide dimmer form and show mainform 
    DimmerForm.Show; 

end; 

這裏是隱藏調光表格的代碼;

procedure HideDimmer; 
begin 

    // Enable to prevent errors 
    DimmerForm.Enabled := true; 
    MainForm.Enabled := true; 

    // Hide dimmer form and show mainform 
    DimmerForm.Hide; 
    MainForm.SetFocus; 

end; 
+0

試着改變你的'HideDimmer'到'DimmerForm.Hide; MainForm.Show;'沒有別的。我非常確定'MainForm.SetFocus'是個問題,但是你已經發布了三個代碼塊,所以很難確定。 (代碼不好,順便說一下,兩個操縱可見控件的獨立程序通常不是一個好主意,但很難告訴你如何做得更好,不過,再次,沒有上下文。) – 2013-03-06 03:15:41

+4

我想你的問題是與新創建的無法獲得焦點的標籤頁相關。隔離問題並編寫一個可調試的簡單可重複測試。 – kludg 2013-03-06 06:09:47

+0

是的,顯然你正在試圖關注一個殘疾或不可見的窗口。錯誤消息很明顯。但是我們可能需要複製才能幫助解決問題。 – 2013-03-06 08:57:11

回答

4

一般來說,你在呼喚重點是尚未創建(你是在創造的過程中,表單上),請嘗試將部分的onCreate代碼來昂秀的東西。有了更多的細節,很難說出發生了什麼,但試試這個。

-4

請遵循按步驟

  1. 按F12
  2. 在對象檢查選擇形式
  3. 組的左屬性設置爲0