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