C#自定义控件的设计与调用

  在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

        /// <summary>
        /// 颜色改变事件数据
        /// </summary>
        public class ColorChangedEventArgs : EventArgs
        {
            private Color color;

            /// <summary>
            /// 颜色改变事件数据
            /// </summary>
            /// <param name="c">改变后的颜色</param>
            public ColorChangedEventArgs(Color c)
            {
                color = c;
            }

            /// <summary>
            /// 获取颜色
            /// </summary>
            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;
        }

运行程序:
Ky_ColorHatch_test.exe

三、源程序下载

https://download.csdn.net/download/dalong10/20241758

四、参考资料

1、stg609的博客https://www.cnblogs.com/stg609/archive/2008/03/29/1128411.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值