OutLook Bar用C#怎么实现?

qlks 2004-05-09 12:36:24
Microsoft Office Outlook最左侧的列表框是怎么写出来的?有什么现有的代码参考下?或大家给我个思路,谢
...全文
221 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qlks 2004-05-09
  • 打赏
  • 举报
回复
给个思路也行啊
Samen168 2004-05-09
  • 打赏
  • 举报
回复
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);
}
Samen168 2004-05-09
  • 打赏
  • 举报
回复
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;
}
}

dahuzizyd 2004-05-09
  • 打赏
  • 举报
回复
http://www.codeproject.com/cs/miscctrl/Group_Panel.asp
ybh2002 2004-05-09
  • 打赏
  • 举报
回复

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

http://www.devcomponents.com/
YanZhen 2004-05-09
  • 打赏
  • 举报
回复
到下载区下载控件及源代码。

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧