| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Drawing;
- using System.Data;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using System.Collections;
- namespace 优软MES.CustomControl.AccordionMenu
- {
- public partial class AccordionMenu : UserControl
- {
- /// <summary>
- /// 记录当前功能面板中的按钮
- /// </summary>
- private ArrayList ArrFunButton = new ArrayList();
- /// <summary>
- /// 记录当前功能面板中的listview
- /// </summary>
- private ArrayList ArrFunListView = new ArrayList();
- /// <summary>
- /// 功能面板的宽度
- /// </summary>
- private int m_nPanFunWidth = 150;
- //功能面板隐藏后的宽度
- private int m_nPanFunHideWidth = 150;
- public AccordionMenu()
- {
- InitializeComponent();
- }
- private void AccordionMenu_Load(object sender, EventArgs e)
- {
- //设置功能面板的位置和宽带
- this.Width = m_nPanFunWidth;
- this.Dock = DockStyle.Left;
- //记录功能按钮
- ArrFunButton.Add(this.button1);
- ArrFunButton.Add(this.button2);
- ArrFunButton.Add(this.button3);
-
- //记录功能面板中的listview,注意要和上面的button对应
- ArrFunListView.Add(this.listView1);
- ArrFunListView.Add(this.listView2);
- ArrFunListView.Add(this.listView3);
- int nCount = ArrFunButton.Count;
- //布置各功能按钮的位置和ListView的属性
- for (int i = nCount - 1; i >= 0; i--)
- {
- Button btn = ArrFunButton[i] as Button;
- btn.Width = this.Width - 4;
- btn.Left = 0;
- //将按钮的单击事件和具体代码对应起来
- btn.Click += new System.EventHandler(Btn_Click);
- if (i == 0)
- {
- btn.Top = 0;
- btn.Anchor = AnchorStyles.Left | AnchorStyles.Top;
- }
- else
- {
- if (i == nCount - 1)
- btn.Top = this.Height - btn.Height - 4;
- else
- btn.Top = (ArrFunButton[i + 1] as Button).Top - btn.Height;
- btn.Anchor = AnchorStyles.Left | AnchorStyles.Bottom;
- }
- //鼠标在按钮上移动时,同样判断当前工具条是否隐藏
- btn.MouseMove += new MouseEventHandler(FunListView_MouseMove);
- //设置listview的anchor属性
- ListView lsv = ArrFunListView[i] as ListView;
- if (lsv != null)
- {
- lsv.Anchor = AnchorStyles.Left | AnchorStyles.Top |
- AnchorStyles.Right | AnchorStyles.Bottom;
- //隐藏功能listview
- lsv.Visible = false;
- //设置listview双击事件
- lsv.DoubleClick += new EventHandler(lsvFun_DoubleClick);
- lsv.MouseMove += new MouseEventHandler(FunListView_MouseMove);
- }
- }
- //将第一个功能按钮点一下
- (ArrFunButton[0] as Button).PerformClick();
- //别忘了打开记时器
- this.timer1.Enabled = true;
- }
- public void Btn_Click(object sender, EventArgs e) {
- Button btnNow = sender as Button;
- if (btnNow == null)
- return;
- int nIndex = this.ArrFunButton.IndexOf(btnNow);
- //将该按钮前面的置顶
- for (int i = 1; i <= nIndex; i++)
- {
- Button btn = ArrFunButton[i] as Button;
- btn.Top = ((Button)ArrFunButton[i - 1]).Bottom;
- btn.Anchor = AnchorStyles.Left | AnchorStyles.Top;
- }
- //将下面的按钮下移
- for (int i = ArrFunButton.Count - 1; i > nIndex; i--)
- {
- Button btn = ArrFunButton[i] as Button;
- if (i == ArrFunButton.Count - 1)//最后一个
- btn.Top = this.Height - btn.Height - 4;
- else
- btn.Top = ((Button)ArrFunButton[i + 1]).Top - btn.Height;
- btn.Anchor = AnchorStyles.Left |AnchorStyles.Bottom;
- }
- //显示对应的listview
- for (int i = 0; i < ArrFunButton.Count; i++)
- {
- ListView lsv = ArrFunListView[i] as ListView;
- //当前按钮对应的ListView
- if (i == nIndex)
- {
- lsv.Left = 0;
- lsv.Width = btnNow.Width;
- lsv.Top = btnNow.Bottom;
- if (nIndex == ArrFunListView.Count - 1)//最后一个
- lsv.Height = this.Height - btnNow.Bottom - 4;
- else
- lsv.Height = (ArrFunButton[i + 1] as Button).Top - btnNow.Bottom;
- //将当前ListView显示出来
- if (!lsv.Visible)
- lsv.Visible = true;
- }
- else //隐藏其他listview
- {
- if (lsv.Visible)
- lsv.Visible = false;
- }
- }
- }
- //隐藏后鼠标在本工具条上移动时,将它显示出来
- private void FunListView_MouseMove(object sender, MouseEventArgs e)
- {
- if (this.Width == m_nPanFunHideWidth)
- {
- this.Width = m_nPanFunWidth;
- this.timer1.Enabled = true;
- }
- }
- //双击listview后根据当前项执行操作
- private void lsvFun_DoubleClick(object sender, System.EventArgs e)
- {
- //双击后执行一个功能
- ListView lsv = sender as ListView;
- if (lsv == null)
- return;
- if (lsv.SelectedItems.Count == 0)
- return;
- ListViewItem item = lsv.SelectedItems[0];
- MessageBox.Show("你双击了:" + item.Text);
- }
-
- }
- }
|