zoukankan      html  css  js  c++  java
  • 好用的ToolStripManager类

    学习笔记,转载请注明出处!

    运用ToolStripManager可以实现ToolStrip工具条的合并,下面是多文档应用程序开发中将文档子窗体的菜单和工具条合并到父窗体中用的的部分代码!合并,需要父窗体有ToolStripPanel和ToolStrip。MenuStrip是ToolStrip的子类,当然也可以实现合并了!这个类的使用需要好好揣摩学习。

     1 protected override void OnMdiChildActivate(EventArgs e)
    2 {
    3 DocumentForm olddocument = m_activeDocument;
    4 base.OnMdiChildActivate(e);
    5 m_activeDocument = this.ActiveMdiChild as DocumentForm;
    6 foreach (Control ctrl in Controls)
    7 {
    8 if (ctrl is ToolStripPanel)
    9 ((ToolStripPanel)ctrl).SuspendLayout();
    10 }
    11 if (m_activeDocument != null)
    12 {
    13 ToolStripManager.RevertMerge(m_menuItems.GetStrip("edit"));
    14 ToolStripManager.RevertMerge(m_menuItems.GetStrip("draw"));
    15 ToolStripManager.RevertMerge(m_menuItems.GetStrip("layer"));
    16 ToolStripManager.RevertMerge(m_menuItems.GetStrip("status"));
    17 ToolStripManager.RevertMerge(m_menuItems.GetStrip("modify"));
    18 ToolStripManager.Merge(m_activeDocument.GetToolStrip("draw"), m_menuItems.GetStrip("draw"));
    19 ToolStripManager.Merge(m_activeDocument.GetToolStrip("edit"), m_menuItems.GetStrip("edit"));
    20 ToolStripManager.Merge(m_activeDocument.GetToolStrip("layer"), m_menuItems.GetStrip("layer"));
    21 ToolStripManager.Merge(m_activeDocument.GetToolStrip("status"), m_menuItems.GetStrip("status"));
    22 ToolStripManager.Merge(m_activeDocument.GetToolStrip("modify"), m_menuItems.GetStrip("modify"));
    23 }
    24 foreach (Control ctrl in Controls)
    25 {
    26 if (ctrl is ToolStripPanel)
    27 ((ToolStripPanel)ctrl).ResumeLayout();
    28 }
    29 }

    个人学习示例结果:

     1  protected override void OnMdiChildActivate(EventArgs e)
    2 {
    3 base.OnMdiChildActivate(e);
    4 foreach (Control ctrl in Controls)
    5 {
    6 if (ctrl is ToolStripPanel)
    7 ((ToolStripPanel)ctrl).SuspendLayout();
    8 }
    9 if (this.ActiveMdiChild != null && this.Disposing==false) // 修改前代码为if (this.ActiveMdiChild != null )
    10 {
    11 bool res= ToolStripManager.RevertMerge(m_MapViewTools);
    12 ToolStripManager.RevertMerge(m_SceneViewTools);
    13 bool res2=ToolStripManager.Merge(m_MapView.BasicMapTools,m_MapViewTools );
    14 ToolStripManager.Merge(m_SceneView.BasicSceneTools, m_SceneViewTools);
    15 //MessageBox.Show(res2.ToString());
    16 if (this.ActiveMdiChild.Name == "MapControlView")
    17 {
    18 m_MapView.EnableAllTools();
    19 m_SceneView.DisableAllTools();
    20 m_Explorer.axTOCControl1.SetBuddyControl(m_MapView.MyMapControl);//报错处
    21
    22
    23 }
    24 else if (this.ActiveMdiChild.Name == "SceneControlView")
    25 {
    26 m_MapView.DisableAllTools();
    27 m_SceneView.EnableAllTools();
    28 m_Explorer.axTOCControl1.SetBuddyControl(m_SceneView.MySceneControl);
    29 }
    30 }
    31
    32 foreach (Control ctrl in Controls)
    33 {
    34 if (ctrl is ToolStripPanel)
    35 ((ToolStripPanel)ctrl).ResumeLayout();
    36 }
    37 }

        (1     (2

    其他:在关闭父窗体的时候报错“COM 对象与其基础 RCW 分开后就不能再使用。”这句话倒很好理解,但是到底什么原因?个人猜想是TOC窗体先销毁,然后销毁Map和Scene视图所致!所以修改了代码,增加了主窗体是否销毁中 if (this.ActiveMdiChild != null && this.Disposing==false) 。

    文章未经说明均属原创,学习笔记可能有大段的引用,一般会注明参考文献。 欢迎大家留言交流,转载请注明出处。
  • 相关阅读:
    并发与并行
    cgi fastcgi
    阻塞和非阻塞,同步和异步
    PHP常量
    nginx入门(4):FastCGI代理
    fastjson实体转json顺序不一致问题
    vue在一个方法执行完后再执行另一个方法
    如何搭建一个vue项目(完整步骤)
    什么是Node.js?
    Android学习记录---在子线程中使用组件ui会报错
  • 原文地址:https://www.cnblogs.com/yhlx125/p/2351185.html
Copyright © 2011-2022 走看看