轉(zhuǎn)帖|其它|編輯:郝浩|2010-12-20 13:36:37.000|閱讀 2275 次
概述:在前段時間一篇隨筆《利用優(yōu)秀的.NET界面控件,打造新潮的界面效果》中介紹過Dotnetbar的界面效果,雖然引發(fā)不少關(guān)于該控件效果的爭議,不過話說回來,使用該控件也不失為一個界面的解決方案,本文繼續(xù)探尋該控件的使用,在QQ搜通天企業(yè)版軟件中使用該控件做了一次完整的改造,碰到并解決了一些問題,本文主要總結(jié)介紹如何利用Dotnetbar控件來實現(xiàn)多文檔界面的效果。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
在前段時間一篇隨筆《利用優(yōu)秀的.NET界面控件,打造新潮的界面效果》中介紹過Dotnetbar的界面效果,雖然引發(fā)不少關(guān)于該控件效果的爭議,不過話說回來,使用該控件也不失為一個界面的解決方案,本文繼續(xù)探尋該控件的使用,在QQ搜通天企業(yè)版軟件中使用該控件做了一次完整的改造,碰到并解決了一些問題,本文主要總結(jié)介紹如何利用Dotnetbar控件來實現(xiàn)多文檔界面的效果。首先我們先來看看軟件的主體界面效果,如下圖所示。
本界面主要利用Bar控件來實現(xiàn)多文檔的界面效果,每個子窗體皆為一個用戶控件,當(dāng)然也包括容納各種窗體的容器CtrlMdiBar類,也是一個用戶控件,在主界面Ribbon控件的RibbonClientPanel區(qū)域放置容器,然后每次打開窗體,就動態(tài)創(chuàng)建或者激活一個窗體頁,這樣就實現(xiàn)了多文檔界面的效果了。
bar = new CtrlMdiBar();
bar.DockTabClosed = new DockTabClosedDelegate(OnDockItemClosed);
SetDetailPanel(bar);
private CtrlMdiBar bar;
private Dictionary<string, DockContainerItem> MdiDict =
new Dictionary<string, DockContainerItem>();
public void SetDetailPanel(UserControl uc)
{
if (uc == null)
{
throw new ArgumentNullException("uc", @"用戶控件uc不能為空");
}
uc.Dock = DockStyle.Fill;
ribbonDetailPanel.Controls.Clear();
ribbonDetailPanel.Controls.Add(uc);
}
public void SetMdiForm(UserControl uc, string itemText)
{
DockContainerItem item = null;
string type = itemText;//uc.GetType().Name;
if (MdiDict.ContainsKey(type))
{
item = MdiDict[type];
}
else
{
PanelDockContainer panel = new PanelDockContainer();
item = new DockContainerItem();
item.Control = panel;
item.Text = itemText;
uc.Dock = DockStyle.Fill;
panel.Controls.Add(uc);
MdiDict.Add(type, item);
bar.bar1.Items.Add(item);
}
bar.bar1.SelectedDockContainerItem = item;
this.Refresh();
}
private void OnDockItemClosed(DockContainerItem item)
{
string type = item.Text;
if (MdiDict.ContainsKey(type))
{
MdiDict.Remove(type);
}
}
然后每次按鈕打開一個窗體頁的時候,只需要簡單的調(diào)用函數(shù)即可,如下面幾個窗體頁的打開操作一樣
private void btnMyQunUser_Click(object sender, EventArgs e)
{
SetMdiForm(new CtrlGroupUser(), MDIForm.查詢個人群成員.ToString());
}
private void btnMyQQUser_Click(object sender, EventArgs e)
{
SetMdiForm(new CtrlQQContact(), MDIForm.查詢個人QQ好友.ToString());
}
private void btnXiaoyou_Click(object sender, EventArgs e)
{
SetMdiForm(new CtrlXiaoyou(), MDIForm.查詢QQ校友.ToString());
}
其中CtrlMDIBar容器,主要是一個用戶控件放置一個Dotnetbar的Bar控件,然后在該控件里面調(diào)用委托處理控件關(guān)閉的事件,主要代碼如下所示。
public delegate void DockTabClosedDelegate(DockContainerItem item);
public partial class CtrlMdiBar : UserControl
{
public DockTabClosedDelegate DockTabClosed;
public CtrlMdiBar()
{
InitializeComponent();
}
private void bar1_DockTabClosed(object sender, DevComponents.DotNetBar.DockTabClosingEventArgs e)
{
//MessageExUtil.ShowTips("DockTabClosed");
if (DockTabClosed != null)
{
DockTabClosed(e.DockContainerItem);
}
}
這樣,我們后面如果要增加一個窗體頁放到容器里面,只需要再定義一個用戶控件,并設(shè)計好界面等處理方式即可,動態(tài)增加一個界面窗體頁將非常簡單。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載