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