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; } }
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;
}
}
{
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);
}