四联光电智能照明论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 5913|回复: 1
打印 上一主题 下一主题

ToolStripContainer ToolStrip相关用法记录

[复制链接]
  • TA的每日心情
    开心
    2018-12-28 16:25
  • 817

    主题

    1556

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    14941
    跳转到指定楼层
    楼主
    发表于 2016-10-25 22:15:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    用过VS的都知道,顶部有很多工具条,可以显示隐藏,也可以拖来拖去。这个在winform里面就是用ToolStripContainer实现的。如何使用,网上帖子多得是,这里记录一下我被坑的地方。 1、ToolStripContainer的高度随着toolstrip的拖动发生变化,也就是说,当toolstrip工具条之前是两行排列,现在拖为一行,这时如果不做任何处理,ToolStripContainer的高度仍然保持原样,有一片空白,看着很是别扭。网上找了很久,无果。后来自己调试发现,在TopToolStripPanel_SizeChanged事件里面添加一行代码就搞定啦。
    1.     private void toolStripContainer1_TopToolStripPanel_SizeChanged(object sender, EventArgs e)
    2.         {
    3.             toolStripContainer1.Height = toolStripContainer1.TopToolStripPanel.Height;
    4.         }
    复制代码
    我只要TopToolStripPanel,其他的Panel都隐藏了,没用到。




    2、如何让程序的时候,ToolStripContainer只有一行toolstrip。这个网上也没说,博客园人提问,后来说解决了,但又没晒出解决办法,我表示醉了!
    分两步:
    a、添加工具条进ToolStripContainer,TopToolStripPanel.SizeChanged事件里面设置Container高度。
    b、分别设置每个toolstrip的location。注意这步要在窗体Shown事件里面做。(如果是用usercontrol,在构造函数)。
    务必a在前,b在后。思路就是手动调整Location,稍加调试即可。
    工具条我是放到UserControl里面的:



    1. <p>ZtoolStripContainerMain.TopToolStripPanel.Controls.Add(toolStrip2);
    2. ZtoolStripContainerMain.TopToolStripPanel.Controls.Add(toolStrip1);            
    3. ZtoolStripContainerMain.ContentPanel.Visible = false;
    4. toolItemMapGeneric.Checked = toolStrip1.Visible;
    5. toolItemBusiness1.Checked = toolStrip2.Visible;
    6. ZtoolStripContainerMain.TopToolStripPanel.ContextMenuStrip = menuToolStrip;
    7. ZtoolStripContainerMain.TopToolStripPanel.SizeChanged += delegate//(object o,EventArgs e)
    8. {
    9.     if (ZtoolStripContainerMain.TopToolStripPanel.Height > 0)
    10.     {
    11.         ZtoolStripContainerMain.Height = ZtoolStripContainerMain.TopToolStripPanel.Height;
    12.      }
    13. };</p><p>
    14. </p><p>menuToolStrip.ItemClicked += (o, e) =>
    15. {
    16.     bool ischecked = (e.ClickedItem as ToolStripMenuItem).Checked;
    17.     int visibleCnt = 0;
    18.     foreach (Control item in ZtoolStripContainerMain.TopToolStripPanel.Controls)
    19.     {
    20.         if (item.Visible)
    21.         {
    22.             visibleCnt++;
    23.         }
    24.     }
    25. //至少要有一个工具条存在,因为工具条为0的时候,toolStripContainer右键点击事件失效。
    26.     if (toolStrip1.DisplayRectangle.Height == ZtoolStripContainerMain.Height &&
    27.         ischecked && visibleCnt == 1)
    28.     {
    29.         return;
    30.     }
    31.     if (e.ClickedItem.Text == "地图基本工具")
    32.     {
    33.         ischecked = toolStrip1.Visible = !toolStrip1.Visible;
    34.     }
    35.     else if (e.ClickedItem.Text == "业务工具")
    36.     {
    37.         ischecked = toolStrip2.Visible = !toolStrip2.Visible;
    38.     }
    39.     (e.ClickedItem as ToolStripMenuItem).Checked = ischecked;
    40. };
    41. //为了使刚加载的时候,两根工具条在一行(且toolStrip1排在前面),这里的设置顺序不能换。

    42. toolStrip1.Location = new System.Drawing.Point(0, 0);</p><p>
    43. </p><p>toolStrip2.Location = new System.Drawing.Point(toolStrip1.Width, 0);</p></p>
    复制代码




  • TA的每日心情
    开心
    2018-12-28 16:25
  • 817

    主题

    1556

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    14941
    沙发
     楼主| 发表于 2016-10-25 22:23:18 | 只看该作者
    ToolStripContainer 由控件每一侧的可扩展和可折叠的 ToolStripPanel 以及一个中间 ToolStripContentPanel 组成。使用 ToolStripPanel 来容纳一个或多个 ToolStrip、MenuStrip 或 StatusStrip 控件。使用中间 ToolStripContentPanel 来容纳其他控件。

    通过分别将它们的 TopToolStripPanelVisible、BottomToolStripPanelVisible、LeftToolStripPanelVisible 和 RightToolStripPanelVisible 属性设置为 false,可以隐藏顶部面板、底部面板、左面板和右面板。默认情况下,这些属性的每一个在设计时都是 true。在设计时,ToolStripContainer 还显示其顶部面板已经展开。

    示例
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;


    public class Form1 : Form
    {
        private ToolStripContainer toolStripContainer1;
        private ToolStrip toolStrip1;

        public Form1()
        {
            InitializeComponent();
        }
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new Form1());
        }

        private void InitializeComponent()
        {
            toolStripContainer1 = new System.Windows.Forms.ToolStripContainer();
            toolStrip1 = new System.Windows.Forms.ToolStrip();
            // Add items to the ToolStrip.
            toolStrip1.Items.Add("One");
            toolStrip1.Items.Add("Two");
            toolStrip1.Items.Add("Three");
            // Add the ToolStrip to the top panel of the ToolStripContainer.
            toolStripContainer1.TopToolStripPanel.Controls.Add(toolStrip1);
            // Add the ToolStripContainer to the form.
            Controls.Add(toolStripContainer1);

        }
    }
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Silian Lighting+ ( 蜀ICP备14004521号-1 )

    GMT+8, 2024-5-6 05:12 , Processed in 1.093750 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表