好用的ToolStripManager類

來源:互聯網
上載者:User

學習筆記,轉載請註明出處!

運用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) 。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.