dockpanel的使用
1.建立乙個winform工程,預設生成了乙個winform窗體form1。
2.引用—>新增引用—>瀏覽—>weifenluo.winformsui.docking.dll。
3.設定form1窗體屬性ismdicontainer:true。
4.工具箱—>右鍵—>選擇項—>.net元件—>瀏覽—>weifenluo.winformsui.docking.dll—>在工具箱出現dockpanel。
5.將dockpanel拖到窗體form1上,設定dock屬性,我設定的是:fill。
停靠窗體:
1.新建乙個winform窗體form2。
2.在**中修改窗體繼承於dockcontent。
using weifenluo.winformsui.docking;
public partial class form2 : dockcontent
3.在主窗體form1中顯示停靠窗體。
如果dockpanel巢狀在另1個容器控制項上(如:panel),將dockpanel屬性documentstyle設定為:
dockingwindow:都顯示為標籤窗體
dockingsdi:主窗體下只開啟乙個子窗體時是不以標籤窗體的模式展現的,當子窗體的個數》1時才展示為標籤窗體
在使用dockpanel時 需要注意的幾個小問題
第乙個:
使用過dockpanel的人,都有可能會遇到這樣乙個錯誤:
invalid content: activecontent must be one of the visible contents, or null if there is no visible content.
翻譯過來的意思大致是:無效的內容: 如果沒有乙個可見的內容,activecontent必須是可見的內容或空。
具體是什麼原因,大家可以相互**下。下面我說說出現這個問題的幾種情況
**中的this關鍵字代表的就是dockpanel所在的窗體為form1
1)、當dockpanel的documentstyle不為dockingmdi時,以下**會出現這個問題
frm_a frma = null;
//判斷子窗體中是否已經存在在dockpanel中
foreach (dockcontent frm in this.dockpanel1.contents)
}frma = new frm_a();
frma.mdiparent = this;
frma.show(this.dockpanel1);
解決方案:看你設定dockpanel的documnetstyle是否為dockingmdi。大家也可以試試其他幾種方式(dockingwindow,dockingsdi,systemmdi)
2)、設定了dockpanel的documentstyle不為dockingmdi時,如果你想要設定窗體frm_b為左邊浮動窗體,需要設定窗體frm_b的dockareas為且僅為dockleft,如果想要實現其他功能可自行去設定其他屬性資訊,現在請看下面**
frm_b frmb = null;
//判斷子窗體中是否已經存在在dockpanel中
foreach (dockcontent frm in this.dockpanel1.contents)
}frmb = new frm_b();
= this;
frmb.show(this.dockpanel1,dockstate.dockleft);
注意,如果你在你的**中加了紅色注釋的**,那麼程式執行時 也會報上面的那個錯
解決方案:注釋紅色的**。
原因:(個人理解)frmb.show(this.dockpanel1,dockstate.dockleft);這句**其實就設定了frmb只停靠在dockpanel左邊,此時的frmb是不屬於mdi子窗體的,所以一旦你加入紅色的**,程式就會報錯。
第二個:
拖動、停靠、固定子窗體(顯示在dockpanel中)
拖動:如果你想使你的子窗體可以任意拖動,那麼你在設定子窗體的dockareas屬性時,保持預設值,不要修改。
固定:只需設定你窗體的dockareas為document就行了
第三個:
子窗體和contents的判斷
foreach(form in this.mdichildren)
//這樣判斷時,停靠的窗體是不會計算在內的
而 foreach (dockcontent frm in this.dockpanel1.contents)
}frm_b frmb = new frm_b(this);
frmb.mdiparent = form1;
frmb.show(form1.dockpanel1);
private void getfrmmain()
if (this.parent.parent.parent.parent != null)
else
現在是在a窗體中,this關鍵字已經**的不是主窗體了,那麼這裡我們就需要獲取主窗體物件
當a窗體停靠時,需要this.parent.parent.parent.parent(四個)
不停靠時,只需要三個this.parent.parent.parent
除錯**發現:停靠時
this.parent 為
this.parent.parent 為
this.parent.parent.parent 為
this.parent.parent.parent 為 就是我們要找的主窗體form1
不停靠時:
this.parent 為
this.parent.parent 為
this.parent.parent.parent 為 就是我們要找的主窗體form1
四個小問題,也算不上技巧,是我在開發中遇到過的,裡面的緣由可能解釋不是很清楚,忘大家相互**,共同進步。
Dockpanel 使用技巧
dockpanel的基本使用 我就不說了,網上很多,我想說的是在使用dockpanel時 需要注意的幾個小問題 第乙個 使用過dockpanel的人,都有可能會遇到這樣乙個錯誤 invalid content activecontent must be one of the visible cont...
dockPanel一種使用方法
主窗體的設定 1 主窗體定義好選單 狀態後 2 引用 新增引用 瀏覽 weifenluo.winformsui.docking.dll 3 主窗體屬性 ismdicontainer true 4 工具箱 右鍵 選擇項 net元件 瀏覽 weifenluo.winformsui.docking.dll...
DockPanel 和DockPane的區別
dockpanel類的定義為 public partial class dockpanel panel 繼承自panel 以mainform.cs 為例 窗體的灰色區域為dockpanel 控制項 其在 mainform.designer.cs定義為 public weifenluo.winform...