ListView 导航栏

using System.Drawing;
using System.Windows.Forms;

Splitter splitterNavigate = new Splitter();
splitterNavigate.BackColor = SystemColors.Window;
splitterNavigate.BorderStyle = BorderStyle.Fixed3D;
splitterNavigate.Cursor = Cursors.Hand;
splitterNavigate.Location = new Point(0, 24);
splitterNavigate.Size = new Size(232, 688);
Controls.Add(splitterNavigate);

        #region ListNavigate
        private void ListNavigate()
        {
            if (lvNavigate == null)
            {
                lvNavigate = new ListView();
                lvNavigate.Alignment = ListViewAlignment.Left;
                lvNavigate.Dock = DockStyle.Fill;
                lvNavigate.Font = new Font("宋体", 12F, FontStyle.Regular);
                lvNavigate.LabelWrap = false; // 禁用项标签换行。
                lvNavigate.LargeImageList = imageList;
                lvNavigate.View = View.LargeIcon;
                lvNavigate.MouseUp += new MouseEventHandler(lvNavigate_MouseUp);
            }
            splitterNavigate.Controls.Clear();
            splitterNavigate.Controls.Add(lvNavigate);
            lvNavigate.BringToFront(); // 控件移到 Z 顺序的前面。
            foreach (ToolStripMenuItem menuItem in menuStrip.Items)
            {
                if (!menuItem.Visible)
                    continue;
                Button btnNavigate = new Button();
                btnNavigate.Font = lvNavigate.Font;
                btnNavigate.Height = 32;
                btnNavigate.Tag = menuItem;
                btnNavigate.Text = menuItem.Text;
                btnNavigate.Click += new EventHandler(btnNavigate_Click);
                splitterNavigate.Controls.Add(btnNavigate);
            }
            (splitterNavigate.Controls[2] as Button).PerformClick();
        }

        private void btnNavigate_Click(object sender, EventArgs e)
        {
            foreach (Button btn in splitterNavigate.Controls.OfType<Button>())
            {
                btn.Dock = DockStyle.Bottom;
            }
            Button btnNavigate = sender as Button;
            btnNavigate.Dock = DockStyle.Top;
            lvNavigate.Clear();
            lvNavigate.BeginUpdate();
            foreach (ToolStripMenuItem item in (btnNavigate.Tag as ToolStripMenuItem).DropDownItems)
            {
                lvNavigate.Items.Add(item.Text.Substring(0, item.Text.Length - 4), 0).Tag = item;
            }
            StringBuilder sb = new StringBuilder(lvNavigate.Items[0].Text);
            int length = (lvNavigate.ClientSize.Width - sb.Length * lvNavigate.Font.Height) / 16;
            while (length-- > 0)
            {
                sb.Insert(0, ' ');
                sb.Append(' ');
            }
            lvNavigate.Items[0].Text = sb.ToString(); // 文本水平居中。
            lvNavigate.EndUpdate();
        }

        private void lvNavigate_MouseUp(object sender, MouseEventArgs e)
        {
            ListViewHitTestInfo info = lvNavigate.HitTest(e.Location);
            if ((info.Location & ListViewHitTestLocations.Label) != 0)
            {
                if (info.Item.Equals(lvNavigate.Tag))
                    return;
                ToolStripMenuItem menuItem = info.Item.Tag as ToolStripMenuItem;
                if (!menuItem.OwnerItem.Equals(systemMenu) && !menuItem.OwnerItem.Equals(helpMenu))
                {
                    foreach (Form childForm in this.MdiChildren)
                    {
                        childForm.Close();
                        if (Convert.ToBoolean(childForm.Tag))
                            return;
                        childForm.Dispose();
                    }
                    sbTitle.Remove(0, sbTitle.Length);
                    sbTitle.Append(info.Item.Text);
                    sbTitle.Capacity = sbTitle.Append("        ").Length;
                    this.Text = null;
                    lvNavigate.Tag = info.Item;
                }
                menuItem.PerformClick();
            }
        }
        #endregion

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值