用codejock的dockingpane.挺好用的 
具体功能都已经实现了。
效果图:

步骤:
1.在窗体上放一个DockingPane的控件。
2.添加DockingPane的dll引用
3.添加using XtremeDockingPane;
4.设置DockingPan的属性
private void init(DataSet ds)
{
try
{
//创建面板
XtremeDockingPane.Pane PaneToolBox = 
DockingPaneManager.CreatePane(ID.PANE_TOOLBOX,140, 100, DockingDirection.DockLeftOf, null);
PaneToolBox.Title = "工具栏";//设置标题
PaneToolBox.Hide();//隐藏
DockingPaneManager.RedrawPanes();//重绘
DockingPaneManager.Options.ShowContentsWhileDragging = true;//拖拽时是否显示内容
//显示移动标示
DockingPaneManager.Options.ShowDockingContextStickers = true;
DockingPaneManager.Options.AlphaDockingContext = true;
DockingPaneManager.VisualTheme = VisualTheme.ThemeWord2007;//设置主题
DockingPaneManager.PanelPaintManager.Font.Size = 9;//设置字号
DockingPaneManager.PanelPaintManager.Font.Bold = true;//设置粗体    
}
catch (Exception ex)
{
}
}
5.设置要显示的内容。(自定义)

#region 为菜单数据源赋值
private static void InitMenu()
{
DataTable dt = new DataTable();
dt.Columns.Add("Uuid");
dt.Columns.Add("Resourcename");
dt.Columns.Add("Parentid");
dt.Columns.Add("SortCode");
DataRow dr = dt.NewRow();
dr[0] = "6AE68889-2AF4-4C79-9564-6252AA35FE71";
dr[1] = "系统管理";
dr[2] = "0";
dr[3] = "6";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = "5BBA2F6F-83B1-4FD3-B061-F08BBD9BE71E";
dr[1] = "日志查看";
dr[2] = "6AE68889-2AF4-4C79-9564-6252AA35FE71";
dr[3] = "0";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = "6BBA2F6F-83B1-4FD3-B061-F08BBD9BE71E";
dr[1] = "修改密码";
dr[2] = "6AE68889-2AF4-4C79-9564-6252AA35FE71";
dr[3] = "1";
dt.Rows.Add(dr);
//
dr = dt.NewRow();
dr[0] = "5AE68889-2AF4-4C79-9564-6252AA35FE12";
dr[1] = "权限管理";
dr[2] = "0";
dr[3] = "5";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = "4g3f2d6F-83B1-4FD3-B061-F08BBD9BE71E";
dr[1] = "分配权限";
dr[2] = "5AE68889-2AF4-4C79-9564-6252AA35FE12";
dr[3] = "1";
dt.Rows.Add(dr);

dr = dt.NewRow();
dr[0] = "5AE644449-2AF4-4C79-9564-6252AA35FE12";
dr[1] = "综合查询";
dr[2] = "0";
dr[3] = "4";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = "4g3f2d6F-23B1-4FD3-B061-F08BBD9BE71E";
dr[1] = "人员查询";
dr[2] = "5AE644449-2AF4-4C79-9564-6252AA35FE12";
dr[3] = "1";
dt.Rows.Add(dr);

dr = dt.NewRow();
dr[0] = "5AE644449-2AF3-4C79-9564-6252AA35FE12";
dr[1] = "统计报表";
dr[2] = "0";
dr[3] = "3";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = "4g3f2d6F-83B1-4FD2-B061-F08BBD9BE71E";
dr[1] = "报表初审";
dr[2] = "5AE644449-2AF3-4C79-9564-6252AA35FE12";
dr[3] = "1";
dt.Rows.Add(dr);
dsMenu.Tables.Add(dt);
}
#endregion
写一个事件,弹出CommandPane

private void DockingPaneManager_AttachPaneEvent(object sender, AxXtremeDockingPane._DDockingPaneEvents_AttachPaneEvent e)
{
try
{
switch (e.item.Id)
{
case ID.PANE_TOOLBOX:
if (frmCommandPaneView == null)
frmCommandPaneView = new CommandPane(dsMenu);
e.item.Handle = frmCommandPaneView.Handle.ToInt32();
break;
}
}
catch (Exception err)
{
}
}
在CommandPane里面

DataSet dsMenu;
public CommandPane(DataSet ds)
{
InitializeComponent();
dsMenu = ds;
CreateShortcutBar();
}
8,上面引用了这么一个方法

void CreateShortcutBar()
{
DataRow[] rowP;
DataRow[] rowC;
string uuid;
bool flag = false;
frmTopMenu top;
rowP = dsMenu.Tables[0].Select("Resourcename='综合查询'");
if (rowP.Length > 0)
{
uuid = rowP[0][0].ToString();
rowC = dsMenu.Tables[0].Select("Parentid='" + uuid + "'");
if (rowC.Length > 0)
{
top = new frmTopMenu("综合查询", dsMenu);
ShortcutBarItem ItemZH = wndShortcutBar.AddItem(ID.SHORTCUT_INBOX, "综合查询", top.Handle.ToInt32());
if (!flag)
{
wndShortcutBar.Selected = ItemZH;
flag = true;
}
}
}
wndShortcutBar.ExpandedLinesCount = wndShortcutBar.ItemCount;             
wndShortcutBar.Icons = (XtremeShortcutBar.ImageManagerIcons)ImageManager.Icons;
}
上面用到了一个frmTopMenu窗体

static public frmTopMenu Instance;
DataSet ds;
public frmTopMenu()
{
InitializeComponent();
Instance = this;
}
public frmTopMenu(string caption, DataSet dsMenu)
{
InitializeComponent();
ds = dsMenu;
loadItems(caption);
menuCaption.Caption = caption;
}
获得传来的菜单数据集,然后调用这个方法

private void loadItems(string caption)
{
DataRow[] rowP;
DataRow[] rowC;
string uuid;
switch (caption)
{
case "综合查询":
tvwMenu.Nodes.Clear();
rowP = ds.Tables[0].Select("Resourcename='综合查询'", "SortCode ASC");
uuid = rowP[0][0].ToString();
rowC = ds.Tables[0].Select("Parentid='" + uuid + "'");
for (int i = 0; i < rowC.Length; i++)
{
string name = rowC[i][1].ToString();
icon++;
tvwMenu.Nodes.Add(name, name, icon, 0);
}
break;
}
}
窗体上有一个treeview和一个AxShortCutCaption控件

treeview有一个事件,用于显示标题内容

private void tvwMenu_MouseDown(object sender, MouseEventArgs e)
{
TreeNode tn = tvwMenu.GetNodeAt(e.X, e.Y);
if (tn != null)
{
string name = tn.Text;
MessageBox.Show(name);
}
}
至此,基本上显示就没有问题了。
总结:一个主窗口,一个CommandPane窗口。
主窗口有一个控件,名为DockingPaneManager,有一个事件。
CommandPane窗口有一个控件,名为CommandPane
问题;在不是MDI窗体的情况下,如何实现右侧内容随着菜单大小变化而变化位置?
解决:  
private void DockingPaneManager_ResizeEvent(object sender, EventArgs e)
{
int left, top, right, bottom;
DockingPaneManager.GetClientRect(out left, out top, out right, out bottom);
this.groupBox1.SetBounds(left, top, right - left, bottom - top);            
}
DockingPaneManager为工具栏的名字
groupBox1右边所有控件的容器的名字(用pane也一样)

XTP dockingpane的使用方法相关推荐

  1. ios 默认字体加粗

    [UIFont boldSystemFontOfSize:XXX]; XXX 指的是字号 查看全文 http://www.taodudu.cc/news/show-4220215.html 相关文章: ...

  2. 终极事务处理(XTP,Hekaton)——万能大招?

    在SQL Server 2014里,微软引入了终极事务处理(Extreme Transaction Processing),即大家熟知的Hekaton.我在网上围观了一些文档,写这篇文章,希望可以让大 ...

  3. 在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 11g 集群

    作者:Jeffrey Hunter 了解如何以低于 2,700 美元的费用在 Oracle Enterprise Linux 上安装并配置 Oracle RAC 11g 第 2 版开发集群. 本指南中 ...

  4. Java面试题大全2021版

    一.Java 基础 JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境. JRE:Java Run ...

  5. VC2010 中 MFC 的改进导致 XTP 停靠窗体无法显示的解决方法

    XTP( xtreme ToolKit Pro )界面库是基于 MFC 扩展的优秀的界面库,公司的项目一直在使用,但是最近尝试使用 VS2010 编辑工程时发现,停靠窗口居然消失了,跟踪消息发现停靠窗 ...

  6. 创建XTP图表的方法

    首先声明: CXTPChartControl   m_chartControl; 然后创建: m_chartControl.Create(WS_CHILD | WS_VISIBLE, CRect(0, ...

  7. 补充 宝玉 之《URL欺骗之以假乱真!》之 POST 方法提交数据 之 处理!

    补充 宝玉 之<URL欺骗之以假乱真!>之 POST 方法提交数据 之 处理! (之乎者也,怪别扭的!) 我们首先搭建一个环境: IIS 代理一下 Resin 下的 jsp 页面! (Re ...

  8. XTP界面在Dialog里的实现

    1,确定你已经装好了XTP. 2,修改目录:工具/选项/目录      include files  :  D:\Microsoft Visual Studio\Xtreme ToolkitPro v ...

  9. 由AFX_IDW_PANE_FIRST宏的含义分析界面库XTP的一个bug

    Codejock的界面库Xtreme Toolkit Pro(XTP)是当前MFC开发中发展得比较成熟,应用也颇为广泛的几个界面库之一,其强大的界面美化功能以及简便的使用步骤深受不少MFC程序员的青睐 ...

最新文章

  1. 远控软件VNC***案例研究
  2. 五十音图平假名流氓记忆(MD~!真难)
  3. Ice-3.5.1在CentOS 6.5系统中的编译配置教程
  4. linux shell date 1,linux shell date命令的坑(date 1 month ago 的诡异现象)
  5. Android小项目之--服务【Service】
  6. mysql取消mvvc机制_MySQL探秘(六):InnoDB一致性非锁定读
  7. mysql数据库架构_MySQL数据库之互联网常用架构方案
  8. 台电t30_数码:台电发布T30平板电脑,10.1英寸/p70处理器/4+64GB内存组合
  9. 拿来就能用!几步搭建一套简单直播系统 | 原力计划
  10. codeforces 712C C. Memory and De-Evolution(贪心)
  11. 基于javaweb的订餐管理系统的设计与实现 毕业设计毕设参考
  12. 苹果手机投影到墙上_隔空触控的投影仪,仅有巴掌大小
  13. ctbs mysql_C/C++/Java
  14. C语言小日常—关机代码
  15. word2016页码怎么设置从任意指定页开始
  16. 前端的3D(css3版本)--淘宝造物节3D创景的制作
  17. 2023华中农业大学计算机考研信息汇总
  18. 备战sp23春招 day8 | 344.反转字符串 541. 反转字符串II 剑指 05.替换空格 151.翻转字符串里的单词 剑指58-II.左旋转字符串
  19. 哈工大计算机学院专业成绩公示,哈工大2009计算机学院录取名单及初试复试成绩排名...
  20. Pytest 基础教程

热门文章

  1. 无法卸载creative cloud桌面应用程序
  2. 新书推荐:《AI 3.0》
  3. 知己知彼,一起来了解中国在线音频市场现状!
  4. 力扣第235题“二叉搜索树的最近公共先祖”的解题思路
  5. 基于微信小程序云开发的校园类平台
  6. 2021衡阳田家炳高考成绩查询,衡阳2021高考最高分多少分,衡阳历年高考状元资料...
  7. Parallels Desktop 17.x by TNT 出现网络初始化失败怎么办
  8. 腾讯微信公众平台账号类型说明
  9. FPGA学习-Verilog例化说明
  10. ios 常用的30个动画效果