C# Winform ToolStripContainer ToolStrip相关用法记录

来源:互联网 发布:mac清歌输入法联想词 编辑:程序博客网 时间:2024/05/04 23:34

用过VS的都知道,顶部有很多工具条,可以显示隐藏,也可以拖来拖去。这个在winform里面就是用ToolStripContainer实现的。如何使用,网上帖子多得是,这里记录一下我被坑的地方。

1、ToolStripContainer的高度随着toolstrip的拖动发生变化,也就是说,当toolstrip工具条之前是两行排列,现在拖为一行,这时如果不做任何处理,ToolStripContainer的高度仍然保持原样,有一片空白,看着很是别扭。网上找了很久,无果。后来自己调试发现,在TopToolStripPanel_SizeChanged事件里面添加一行代码就搞定啦。

<span style="font-size:12px;color:#333399;">private void toolStripContainer1_TopToolStripPanel_SizeChanged(object sender, EventArgs e)        {            toolStripContainer1.Height = toolStripContainer1.TopToolStripPanel.Height;        }</span>
我只要TopToolStripPanel,其他的Panel都隐藏了,没用到。

2、如何让程序的时候,ToolStripContainer只有一行toolstrip。这个网上也没说,博客园人提问,后来说解决了,但又没晒出解决办法,我表示醉了!

分两步:a、添加工具条进ToolStripContainer,TopToolStripPanel.SizeChanged事件里面设置Container高度。

b、分别设置每个toolstrip的location。注意这步要在窗体Shown事件里面做。(如果是用usercontrol,在构造函数)。

务必a在前,b在后。思路就是手动调整Location,稍加调试即可。

工具条我是放到UserControl里面的:

<span style="font-size:12px;">   <span style="color:#333399;">   //为了使刚加载的时候,两根工具条在一行(且toolStrip1排在前面),这里的添加顺序不能换。</span></span>

            ZtoolStripContainerMain.TopToolStripPanel.Controls.Add(toolStrip2);
            ZtoolStripContainerMain.TopToolStripPanel.Controls.Add(toolStrip1);            
            ZtoolStripContainerMain.ContentPanel.Visible = false;
            toolItemMapGeneric.Checked = toolStrip1.Visible;
            toolItemBusiness1.Checked = toolStrip2.Visible;
            ZtoolStripContainerMain.TopToolStripPanel.ContextMenuStrip = menuToolStrip;

            ZtoolStripContainerMain.TopToolStripPanel.SizeChanged += delegate//(object o,EventArgs e)
            {
                if (ZtoolStripContainerMain.TopToolStripPanel.Height > 0)
                {
                    ZtoolStripContainerMain.Height = ZtoolStripContainerMain.TopToolStripPanel.Height;
                }
            };

            menuToolStrip.ItemClicked += (o, e) =>
                {
                    bool ischecked = (e.ClickedItem as ToolStripMenuItem).Checked;
                    int visibleCnt = 0;
                    foreach (Control item in ZtoolStripContainerMain.TopToolStripPanel.Controls)
                    {
                        if (item.Visible)
                        {
                            visibleCnt++;
                        }
                    }
                    //至少要有一个工具条存在,因为工具条为0的时候,toolStripContainer右键点击事件失效。
                    if (toolStrip1.DisplayRectangle.Height == ZtoolStripContainerMain.Height &&
                        ischecked && visibleCnt == 1)
                    {
                        return;
                    }

                    if (e.ClickedItem.Text == "地图基本工具")
                    {
                        ischecked = toolStrip1.Visible = !toolStrip1.Visible;
                    }
                    else if (e.ClickedItem.Text == "业务工具")
                    {
                        ischecked = toolStrip2.Visible = !toolStrip2.Visible;
                    }
                    (e.ClickedItem as ToolStripMenuItem).Checked = ischecked;
                };
            //为了使刚加载的时候,两根工具条在一行(且toolStrip1排在前面),这里的设置顺序不能换。

            toolStrip1.Location = new System.Drawing.Point(0, 0);

            toolStrip2.Location = new System.Drawing.Point(toolStrip1.Width, 0);




0 0
原创粉丝点击