一.设计时效果:




二.运行时效果:


三.简单谈谈设计思路:
与以往不同的是,它的主体是一个完全绘制出来的控件,不象我前面写的工具树容器,是在一个容器中通过设置控件的相对位置来达到效果.首先建立基础元素类,元素类(继承自基础元素类),元素集合类,分组元素类(继承自基础元素类),分组元素集合类.最后来实现工具树.通过重写OnPaint,OnResize,OnMouseDown,OnMouseLeave,OnMouseMove等方法来对不同时期进行绘制.
如果哪位朋友对源程序感兴趣,可以MAIL给我.
heqiumie@tom.com
四.部分源代码:
public
delegate
void
ItemChangedEventHandler(Object sender, EventArgs e);
public
event
ItemChangedEventHandler ItemChanged;
public
event
EventHandler ItemClick;
public
event
EventHandler ItemDoubleClick;

private
VScrollBar vScrollBar1;
//
滚动条
private
JcsToolBoxCategoryCollection _categories
=
new
JcsToolBoxCategoryCollection();
private
Int32 _itemHeight
=
18
;
//
item的高
private
Int32 _categoryHeight
=
16
;
//
分类项的高
private
Int32 _itemSpace
=
2
;
//
item间隔
private
const
Int32 _categoryLeft
=
6
;
//
文字左侧间隔
private
const
Int32 _itemleft
=
6
;

private
JcsToolBoxItem _mouseHoverItem
=
null
;
//
鼠标移动到上面的ITEM
private
JcsToolBoxItem _selectedItem
=
null
;
//
选择的ITEM
private
JcsToolBoxCategory _selectedCateGory
=
null
;
//
选择的分组项
private
Color _borderColor
=
Color.Black;
//
边框的颜色
private
Color _categoryForeColor
=
Color.Black;
//
分组项的前景色
private
Color _categoryBackColor
=
Color.White;
//
分组项的背景色
private
Color _itemBackColor
=
SystemColors.Control;
//
item的背景色
private
Color _itemForeColor
=
SystemColors.WindowText;
//
item的前景色
private
Color _itemSelectedColor
=
Color.LightSkyBlue ;
//
选定项的颜色
private
Color _itemMoveOverColor
=
Color.LightBlue;
//
移动到item其上的颜色
private
Color _categorySelectedColor
=
Color.White;
//
选择分组项的颜色
private
ImageList _imagelist;

private
ControlBorderStyle _borderstyle
=
ControlBorderStyle.SingleLine;
private
CateGoryBackType _categoryBackType
=
CateGoryBackType.Normal;
private
CateGoryColorStyle _categoryColorStyle
=
CateGoryColorStyle.经典风格;

public
enum
ControlBorderStyle

...
{
SingleLine,
Border3D,
None
}
public
enum
CateGoryBackType

...
{
Normal,
GradualChange
}

public
enum
CateGoryColorStyle

...
{
经典风格,
复古风格,
蓝色忧郁,
粉色情怀,
青青芳草
}
public
JcsToolBox()

...
{
InitializeComponent();
this.BorderStyle = BorderStyle.None;

vScrollBar1 = new VScrollBar();
vScrollBar1.Dock = DockStyle.Right;
this.Controls.Add(vScrollBar1);
this.vScrollBar1.Scroll +=new ScrollEventHandler(vScrollBar1_Scroll);

SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.DoubleBuffer, true);
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.ResizeRedraw, true);
RefreshScrollBar();
this._categories.ItemChanged += new CollectionChangeEventHandler(OnCategoryCollectionChanged);
this.ItemChanged += new ItemChangedEventHandler(OnItemChanged);
}



"属性"
#region"属性"

[Category("Jcs属性"), Description("分组项的图标集合对象")]
public ImageList ImageList

...{

get ...{ return this._imagelist; }

set ...{ this._imagelist = value; }
}

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
Category("Jcs属性"),Description("分组项的集合")]
public JcsToolBoxCategoryCollection Categories

...{
get

...{
return _categories;
}
set

...{
_categories = value;
}
}
//代码生成器不生成对象的代码
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public JcsToolBoxItem SelectedItem

...{
get

...{
return _selectedItem;
}
}
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public JcsToolBoxCategory SelectedCateGory

...{
get

...{
return _selectedCateGory;
}
}

[Browsable(true),Category("Jcs属性"),Description("边框颜色")]
public Color BorderColor

...{
get

...{
return _borderColor;
}
set

...{
if (_borderColor == value) return;
_borderColor = value;
Invalidate();
}
}

[Browsable(true),Category("Jcs属性"),Description("分组项的背景色")]
public Color CategoryBackColor

...{
get

...{
return _categoryBackColor;
}
set

...{
_categoryBackColor = value;
Invalidate();
}
}

[Browsable(true), Category("Jcs属性"), Description("分组项的前景色")]
public Color CategoryForeColor

...{
get

...{
return this._categoryForeColor;
}
set

...{
this._categoryForeColor = value;
this.Invalidate();
}
}

[Browsable(true), Category("Jcs属性"), Description("选择分组项的边框颜色")]
public Color CategorySelectedColor

...{

get ...{ return _categorySelectedColor; }
set

...{
_categorySelectedColor = value;
this.Invalidate();
}
}

[Browsable(true), Category("Jcs属性"), Description("移动到Item上时显示的颜色")]
public Color ItemMoveOverColor

...{

get ...{ return _itemMoveOverColor; }
set

...{
_itemMoveOverColor = value;
this.Invalidate();
}
}

[Browsable(true), Category("Jcs属性"), Description("Item的前景色")]
public Color ItemForeColor

...{

get ...{ return _itemForeColor; }
set

...{
_itemForeColor = value;
Invalidate();
}
}

[Browsable(true), Category("Jcs属性"), Description("Item的背景色")]
public Color ItemBackColor

...{

get ...{ return _itemBackColor; }
set

...{
_itemBackColor = value;
Invalidate();
}
}


[Browsable(false )]
public VScrollBar scrollbar

...{

get ...{ return this.vScrollBar1; }
}

[Browsable(true), Category("Jcs属性"), Description("边框显示类型")]
public ControlBorderStyle ToolBoxBorderStyle

...{

get ...{ return this._borderstyle; }
set

...{
this._borderstyle = value ;
this.Invalidate();
}
}
[Browsable(true), Category("Jcs属性"), Description("分组项背景类型")]
public CateGoryBackType CateGoryBackStyle

...{

get ...{ return this._categoryBackType; }
set

...{
this._categoryBackType = value;
this.Invalidate();
}
}
[Browsable(true), Category("Jcs属性"), Description("分组项背景配色方案")]
public CateGoryColorStyle CateGoryColorStyleType

...{

get ...{ return this._categoryColorStyle; }
set

...{
this._categoryColorStyle = value;
this.Invalidate();
}
}