在delphi中隱藏MDI子窗口有兩種方法:
1)發消息及調用ShowWindow函數:
showwindow(childform.handle, sw_hide); // 隱藏子窗口
showwindow(childform.handle, sw_restore); // 顯示子窗口
缺點:使用windows api直接隱藏子窗口,其子窗口的visible屬性和其顯示狀態是不一至的。當子窗口不可見時,其visible屬性可能仍然是true。
2)重載子窗口的visiblechanging方法:
private
procedure visiblechanging; override;//重載
procedure tchildform.visiblechanging;
begin
<使用組件屬性隱藏子窗口時,需要重載此過程,并且不執行任何繼承代碼,否則將報錯>
//inherited; 不能執行此語句!
end;
此后就可以直接設置visible屬性了:
childform.visible:=false;//隱藏子窗口
childform.visible:=true; //顯示子窗口
缺點:當子窗口隱藏了后,有些控件的數據沒有辦法取到,如 TListView, 為這個問題曾經郁悶了很久,不知道是什么原因。例如:子窗口上listview已經有了10行數據,當利用方法2)把使得子窗口不可見了后,調用childform.listview.items.count結果總是0,但是顯示此子窗口后10行數據還是在此listview中。
所以使用1),在程序中不要調用visible屬性。
使用2),在子窗口隱藏了后不要去取該子窗口的數據。