一.设计时效果:
![](https://p-blog.csdn.net/images/p_blog_csdn_net/csharp_start/toolbox-001.JPG)
![](https://p-blog.csdn.net/images/p_blog_csdn_net/csharp_start/toolbox-002.JPG)
![](https://p-blog.csdn.net/images/p_blog_csdn_net/csharp_start/toolbox-005.JPG)
![](https://p-blog.csdn.net/images/p_blog_csdn_net/csharp_start/toolbox-006.JPG)
二.运行时效果:
![](https://p-blog.csdn.net/images/p_blog_csdn_net/csharp_start/toolbox-003.JPG)
![](https://p-blog.csdn.net/images/p_blog_csdn_net/csharp_start/toolbox-004.JPG)
三.简单谈谈设计思路:
与以往不同的是,它的主体是一个完全绘制出来的控件,不象我前面写的工具树容器,是在一个容器中通过设置控件的相对位置来达到效果.首先建立基础元素类,元素类(继承自基础元素类),元素集合类,分组元素类(继承自基础元素类),分组元素集合类.最后来实现工具树.通过重写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;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
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
;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
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;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
private
ControlBorderStyle _borderstyle
=
ControlBorderStyle.SingleLine;
private
CateGoryBackType _categoryBackType
=
CateGoryBackType.Normal;
private
CateGoryColorStyle _categoryColorStyle
=
CateGoryColorStyle.经典风格;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
public
enum
ControlBorderStyle
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
SingleLine,
Border3D,
None
}
public
enum
CateGoryBackType
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
Normal,
GradualChange
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
public
enum
CateGoryColorStyle
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
经典风格,
复古风格,
蓝色忧郁,
粉色情怀,
青青芳草
}
public
JcsToolBox()
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
InitializeComponent();
this.BorderStyle = BorderStyle.None;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
vScrollBar1 = new VScrollBar();
vScrollBar1.Dock = DockStyle.Right;
this.Controls.Add(vScrollBar1);
this.vScrollBar1.Scroll +=new ScrollEventHandler(vScrollBar1_Scroll);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
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);
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
"属性"
#region"属性"
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
[Category("Jcs属性"), Description("分组项的图标集合对象")]
public ImageList ImageList
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
get ...{ return this._imagelist; }
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
set ...{ this._imagelist = value; }
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
Category("Jcs属性"),Description("分组项的集合")]
public JcsToolBoxCategoryCollection Categories
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
get
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
return _categories;
}
set
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
_categories = value;
}
}
//代码生成器不生成对象的代码
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public JcsToolBoxItem SelectedItem
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
get
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
return _selectedItem;
}
}
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public JcsToolBoxCategory SelectedCateGory
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
get
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
return _selectedCateGory;
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
[Browsable(true),Category("Jcs属性"),Description("边框颜色")]
public Color BorderColor
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
get
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
return _borderColor;
}
set
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if (_borderColor == value) return;
_borderColor = value;
Invalidate();
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
[Browsable(true),Category("Jcs属性"),Description("分组项的背景色")]
public Color CategoryBackColor
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
get
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
return _categoryBackColor;
}
set
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
_categoryBackColor = value;
Invalidate();
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
[Browsable(true), Category("Jcs属性"), Description("分组项的前景色")]
public Color CategoryForeColor
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
get
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
return this._categoryForeColor;
}
set
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
this._categoryForeColor = value;
this.Invalidate();
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
[Browsable(true), Category("Jcs属性"), Description("选择分组项的边框颜色")]
public Color CategorySelectedColor
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
get ...{ return _categorySelectedColor; }
set
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
_categorySelectedColor = value;
this.Invalidate();
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
[Browsable(true), Category("Jcs属性"), Description("移动到Item上时显示的颜色")]
public Color ItemMoveOverColor
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
get ...{ return _itemMoveOverColor; }
set
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
_itemMoveOverColor = value;
this.Invalidate();
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
[Browsable(true), Category("Jcs属性"), Description("Item的前景色")]
public Color ItemForeColor
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
get ...{ return _itemForeColor; }
set
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
_itemForeColor = value;
Invalidate();
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
[Browsable(true), Category("Jcs属性"), Description("Item的背景色")]
public Color ItemBackColor
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
get ...{ return _itemBackColor; }
set
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
_itemBackColor = value;
Invalidate();
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
[Browsable(false )]
public VScrollBar scrollbar
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
get ...{ return this.vScrollBar1; }
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
[Browsable(true), Category("Jcs属性"), Description("边框显示类型")]
public ControlBorderStyle ToolBoxBorderStyle
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
get ...{ return this._borderstyle; }
set
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
this._borderstyle = value ;
this.Invalidate();
}
}
[Browsable(true), Category("Jcs属性"), Description("分组项背景类型")]
public CateGoryBackType CateGoryBackStyle
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
get ...{ return this._categoryBackType; }
set
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
this._categoryBackType = value;
this.Invalidate();
}
}
[Browsable(true), Category("Jcs属性"), Description("分组项背景配色方案")]
public CateGoryColorStyle CateGoryColorStyleType
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
get ...{ return this._categoryColorStyle; }
set
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
this._categoryColorStyle = value;
this.Invalidate();
}
}