在C#下建立自己的控件库,需用到自定义控件的设计与调用。
一、自定义控件的设计
自定义控件,步骤如下:
1.点击文件->新建项目->选择Windows控件库2.编辑控件3.点击生成->生成 项目名称 ,完成这一步后会在bin或debug目录下看到"项目名称.dll"文件,这个便是你的控件库了。
具体实操:
1、新建项目
点击文件->新建项目->选择Windows控件库。 项目名称Ky_ColorHatch
2、界面布局
组件面板panel1至panel11,按钮 More。
3、定义外部属性
给控件定义一个外部属性,使我们可以在属性设计视图中对其进行设置。
方法是首先声明一个private 变量 private Color hatchColor;然后编写set与get方法,也就是对应的属性赋值与取值的方法
private Color hatchColor = Color.Black;//当前颜色
#region 自定义属性
[Description("设置当前颜色")] //显示在属性设计视图中的描述
[DefaultValue(typeof(Color), "Black")]
public Color HatchColor
{
get { return hatchColor; }
set
{
hatchColor = value;
panel1.BackColor = value;
}
}
#endregion
4、自定义事件
创建事件所需的委托定义一个当颜色改变时触发的ColorChanged事件编写事件触发方法EventArgs是用户传入的参数,我们这个ColorChangedEventArgs就是继承自这个EventArgs的一个类,目的是用来传递我们选中的颜色给调用方
#region 自定义事件
//事件所需的委托
public delegate void ColorChangedEventHandler(object sender, ColorChangedEventArgs e);
//当颜色改变时触发事件
public event ColorChangedEventHandler ColorChanged;//定义一个ColorChanged事件
protected virtual void OnColorChanged(ColorChangedEventArgs e)
{//事件触发方法
if (ColorChanged != null)
{//判断事件是否为空
ColorChanged(this, e);//触发事件
}
}
#endregion
///
/// 颜色改变事件数据
///
public class ColorChangedEventArgs : EventArgs
{
private Color color;
///
/// 颜色改变事件数据
///
/// 改变后的颜色
public ColorChangedEventArgs(Color c)
{
color = c;
}
///
/// 获取颜色
///
public Color GetColor
{
get { return color; }
}
}
}
5、与控件进行关联
在panel2至panel11的Click事件中填panel_Click在panel2至panel11的MouseEnter事件中填panel_MouseEnter在panel2至panel11的MouseLeave事件中填panel_MouseLeave双击按钮More的Click事件编写事件触发程序
private void More_Click(object sender, EventArgs e)
{
ColorDialog cd = new ColorDialog();
if (cd.ShowDialog() == DialogResult.OK)
{
hatchColor = cd.Color;
panel1.BackColor = hatchColor;
OnColorChanged(new ColorChangedEventArgs(hatchColor));//因为颜色改变所以触发事件
}
}
private void panel_Click(object sender, EventArgs e)
{
Panel p = sender as Panel;
if (p != null)
{
hatchColor = p.BackColor;
panel1.BackColor = hatchColor;
OnColorChanged(new ColorChangedEventArgs(hatchColor));//因为颜色改变所以触发事件
}
}
private void panel_MouseEnter(object sender, EventArgs e)
{
Panel p = sender as Panel;
if (p != null)
{
p.BorderStyle = BorderStyle.FixedSingle;
}
}
private void panel_MouseLeave(object sender, EventArgs e)
{
Panel p = sender as Panel;
if (p != null)
{
p.BorderStyle = BorderStyle.None;
}
}
6、编译,生成DLL文件
在bin\debug\下生成了Ky_ColorHatch.dll
二、自定义控件的调用
新建一个windows窗体应用的项目,如Ky_ColorHatch_test.
点击工具->选择工具项->浏览->选择刚才的那个Ky_ColorHatch.dll文件,这样你便会在你的工具箱中找到你的那个控件 注意: 放置Ky_ColorHatch.dll的文件夹不要采用汉字文件夹,否则会出现“没有可以放置在工具箱上的组件”
此时工具栏出现Ky_ColorHatch控件,双击Ky_ColorHatch控件,会在form上出现Ky_ColorHatch控件,放到正确的位置。
编写按钮事件,把控件的选的颜色传到按钮上
private void button1_Click(object sender, EventArgs e)
{
button1.BackColor = ky_ColorHatch1.HatchColor;
}
运行程序:
三、源程序下载
https://download.csdn.net/download/dalong10/20241758
四、参考资料
1、stg609的博客https://www.cnblogs.com/stg609/archive/2008/03/29/1128411.html