運行我編譯的程序時出現錯誤。爲了防止在隱藏或聚焦之前啓用表單等錯誤,我已採取一切可以預防的措施。該應用程序顯示一個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;
試着改變你的'HideDimmer'到'DimmerForm.Hide; MainForm.Show;'沒有別的。我非常確定'MainForm.SetFocus'是個問題,但是你已經發布了三個代碼塊,所以很難確定。 (代碼不好,順便說一下,兩個操縱可見控件的獨立程序通常不是一個好主意,但很難告訴你如何做得更好,不過,再次,沒有上下文。) – 2013-03-06 03:15:41
我想你的問題是與新創建的無法獲得焦點的標籤頁相關。隔離問題並編寫一個可調試的簡單可重複測試。 – kludg 2013-03-06 06:09:47
是的,顯然你正在試圖關注一個殘疾或不可見的窗口。錯誤消息很明顯。但是我們可能需要複製才能幫助解決問題。 – 2013-03-06 08:57:11