用这个控件:DotNetBar,能做出眩目的效果来,这是它的网站,看看演示效果,可下试用版用:http://www.devcomponents.com/

解决方案 »

  1.   

    http://www.codeproject.com/cs/miscctrl/Group_Panel.asp
      

  2.   

    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Threading;
    using System.Windows.Forms;
    using System.Windows.Forms.ComponentModel;namespace LongWinOutLookBar
    {
    /// <summary>
    /// LongWinOutLookBar 的摘要说明。
    /// </summary>
    public class LongWinOutLookBar : System.Windows.Forms.UserControl
    {
    private System.Windows.Forms.Panel pnControls;
    private System.Windows.Forms.ListView lstItem;
    private System.Windows.Forms.ToolTip toolTip1;
    private System.ComponentModel.IContainer components; public LongWinOutLookBar()
    {
    // 该调用是 Windows.Forms 窗体设计器所必需的。
    InitializeComponent(); // TODO: 在 InitComponent 调用后添加任何初始化
    } /// <summary>
    /// 清理所有正在使用的资源。
    /// </summary>
    protected override void Dispose( bool disposing )
    {
    if( disposing )
    {
    if( components != null )
    components.Dispose();
    }
    base.Dispose( disposing );
    } #region 组件设计器生成的代码
    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器 
    /// 修改此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.components = new System.ComponentModel.Container();
    this.pnControls = new System.Windows.Forms.Panel();
    this.lstItem = new System.Windows.Forms.ListView();
    this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
    this.SuspendLayout();
    // 
    // pnControls
    // 
    this.pnControls.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
    this.pnControls.Dock = System.Windows.Forms.DockStyle.Fill;
    this.pnControls.Location = new System.Drawing.Point(0, 0);
    this.pnControls.Name = "pnControls";
    this.pnControls.Size = new System.Drawing.Size(104, 240);
    this.pnControls.TabIndex = 0;
    this.pnControls.MouseLeave += new System.EventHandler(this.pnControls_MouseLeave);
    // 
    // lstItem
    // 
    this.lstItem.Alignment = System.Windows.Forms.ListViewAlignment.Default;
    this.lstItem.BorderStyle = System.Windows.Forms.BorderStyle.None;
    this.lstItem.Dock = System.Windows.Forms.DockStyle.Fill;
    this.lstItem.FullRowSelect = true;
    this.lstItem.HideSelection = false;
    this.lstItem.LabelWrap = false;
    this.lstItem.Location = new System.Drawing.Point(0, 0);
    this.lstItem.Name = "lstItem";
    this.lstItem.Size = new System.Drawing.Size(132, 332);
    this.lstItem.TabIndex = 2;
    this.lstItem.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lstItem_MouseDown);
    this.lstItem.Click += new System.EventHandler(this.lstItem_Click);
    this.lstItem.DoubleClick += new System.EventHandler(this.lstItem_DoubleClick);
    this.lstItem.MouseUp += new System.Windows.Forms.MouseEventHandler(this.lstItem_MouseUp);
    this.lstItem.MouseHover += new System.EventHandler(this.lstItem_MouseHover);
    this.lstItem.MouseMove += new System.Windows.Forms.MouseEventHandler(this.lstItem_MouseMove);
    this.lstItem.MouseLeave += new System.EventHandler(this.lstItem_MouseLeave);
    // 
    // LongWinOutLookBar
    // 
    this.Controls.Add(this.pnControls);
    this.Name = "LongWinOutLookBar";
    this.Size = new System.Drawing.Size(104, 240);
    this.ResumeLayout(false); }
    #endregion OutlookBars _Bars;
    public OutlookBars Bars
    {
    get
    {
    if(_Bars==null)
    _Bars=new OutlookBars();
    return _Bars;
    }
    } public OutLookBar this[int index]
    {
    get
    {
    return _Bars[index];
    }
    }

    public View View
    {
    get
    {
    return this.lstItem.View;
    }
    set
    {
    this.lstItem.View=value;
    }
    } public BorderStyle BorderStyle
    {
    set
    {
    this.pnControls.BorderStyle=value;
    }
    get
    {
    return this.pnControls.BorderStyle;
    }
    }
    public ImageList LargeImageList
    {
    get
    {
    return this.lstItem.LargeImageList;
    }
    set
    {
    this.lstItem.LargeImageList=value;
    }
    } public ImageList SmallImageList
    {
    get
    {
    return this.lstItem.SmallImageList;
    }
    set
    {
    this.lstItem.SmallImageList=value;
    }
    } public override ContextMenu ContextMenu
    {
    get
    {
    return this.lstItem.ContextMenu;
    }
    set
    {
    this.lstItem.ContextMenu=value;
    }
    }
      

  3.   

    void FillControls()
    {
    Button[] btns=this.buttons();
    if(btns.Length>0)
    {
    if(btns.Length>0)
    {
    this.pnControls.Controls.Add(this.lstItem);
    }
    this.pnControls.Controls.AddRange(btns);
    OutLookBar_Click(btns[0],new EventArgs());
    }
    } void FillControls(int index)
    {
    Button[] btns=this.buttons(index);
    if(btns.Length>0)
    {
    if(btns.Length>0)
    {
    this.pnControls.Controls.Add(this.lstItem);
    }
    this.pnControls.Controls.AddRange(btns);
    }
    }

    public override void Refresh()
    {
    base.Refresh ();
    Thread thread=new Thread(new ThreadStart(ReFillControls));
    thread.Name="ReFill controls";
    thread.Start();
    } void ReFillControls()
    {
    MethodInvoker methodInvoke=new MethodInvoker(_ReFillControls);
    this.BeginInvoke(methodInvoke);
    }
    void _ReFillControls()
    {
    this._index=-1;
    this.pnControls.Controls.Clear();
    FillControls();
    } Hashtable buttonTable;
    Button[] buttons()
    {
    buttonTable=new Hashtable();
    Button[] btns=new Button[this.Bars.Count];
    for(int i=0;i<btns.Length;i++)
    {
    btns[i]=new Button();
    btns[i].TextAlign=ContentAlignment.MiddleCenter;
    btns[i].FlatStyle=FlatStyle.Popup;
    btns[i].Text=Bars[i].Text;
    btns[i].Tag=i;
    btns[i].Dock=DockStyle.Bottom;
    btns[i].Click+=new EventHandler(OutLookBar_Click); buttonTable.Add(i,btns[i]);
    }
    return btns;
    } Button[] buttons(int index)
    {
    Button[] btns=new Button[buttonTable.Count]; if(buttonTable.Count==0) return new Button[]{}; for(int i=0;i<buttonTable.Count;i++)
    {
    Button btn=(Button)buttonTable[i];
    if(i<=index)
    {
    btn.Dock=DockStyle.Top;
    btns[index-i]=btn;
    }
    else
    {
    btn.Dock=DockStyle.Bottom;
    btns[i]=btn;
    }
    }
    return btns;
    } private int _index=-1;
    private void OutLookBar_Click(object sender, EventArgs e)
    {
    Button btn=(Button)sender;
    int index=Convert.ToInt32(btn.Tag); if(_index==index) return;
    _index=index; FillControls(index); this.lstItem.Items.Clear(); ArrayList aListViewItem=new ArrayList();
    for(int i=0;i<Bars[index].Count;i++)
    {
    aListViewItem.Add(Bars[index][i].Clone());
    }
    this.lstItem.Items.AddRange((ListViewItem[])aListViewItem.ToArray(typeof(ListViewItem)));
    } private void lstItem_MouseHover(object sender, System.EventArgs e)
    {
    ListViewItem item =this.lstItem.GetItemAt(X,Y);
    if(item!=null)
    {
    if(item is OutLookBarItem)
    {
    this.toolTip1.SetToolTip(this.lstItem,((OutLookBarItem)item).ToolTip);
    }
    }
    } private int X, Y;
    public event EventHandlerItemFocus ItemFocus;
    private void lstItem_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    X=e.X;
    Y=e.Y;
    ListViewItem item =this.lstItem.GetItemAt(X,Y);
    if(item!=null)
    {
    if(this.ItemFocus!=null)
    {
    this.ItemFocus(Bars[_index],this.lstItem.GetItemAt(X,Y) as OutLookBarItem);
    }
    }
    }
    public event EventHandlerItemClick ItemClick;
    private void lstItem_Click(object sender, System.EventArgs e)
    {
    if(this.ItemClick!=null)
    {
    this.ItemClick(Bars[_index],this.lstItem.GetItemAt(X,Y) as OutLookBarItem);
    }
    } public event EventHandlerItemDoubleClick ItemDoubleClick;
    private void lstItem_DoubleClick(object sender, System.EventArgs e)
    {
    if(this.ItemDoubleClick!=null)
    {
    this.ItemDoubleClick(Bars[_index],this.lstItem.GetItemAt(X,Y) as OutLookBarItem);
    }
    } private void lstItem_MouseLeave(object sender, System.EventArgs e)
    {
    // this.OnMouseLeave(e);
    } private void pnControls_MouseLeave(object sender, System.EventArgs e)
    {
    this.OnMouseLeave(e);
    } private void lstItem_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    this.OnMouseDown(e);
    } private void lstItem_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    this.OnMouseUp(e);
    }
    }
    public delegate void EventHandlerItemFocus(OutLookBar bar,OutLookBarItem item);
    public delegate void EventHandlerItemClick(OutLookBar bar,OutLookBarItem item);
    public delegate void EventHandlerItemDoubleClick(OutLookBar bar,OutLookBarItem item);
    }