C#创建自定义控件及添加自定义属性和事件使用实例详解

 更新时间:2020年05月17日 10:52:52   作者:Im1smb  
这篇文章主要给大家介绍了关于C#创建自定义控件及添加自定义属性和事件使用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言

C#本身提供了很强大的控件库,但是很多控件库的功能只是一些基本的功能,就比如最简单的按钮,C#提供了最基础的按钮使用方法,但是如果要增加一些功能,比如按钮按下要一个图片,弹起要另一个图片这样的工作。当然,我们可以对相关按钮在点击函数中进行更改其背景图片,但是这对于大量的按钮调用来说十分不方便,代码重用率相当的高,会导致使用上的卡顿,在这种情况下,我们可以将这个功能封装起来,这样每次调用起来就很方便,也节省了代码的重用率。

那么如何将上述的那么一个简单的功能封装起来呢,我们首先考虑到的便是按键的属性,我们可以在相关按键中添加新的属性来完成这一步操作。

首先先建立一个用户类库:

       

然后再该类库下添加一个新的组件:

在组件中我们需要首先继承Button类

然后需要添加新的属性供新的控件使用,这里我们添加四个属性:1、按钮按下的图片 2、按钮开启时的图片 3、按钮关闭时的图片 4、该按钮是单次点击型还是开光状态型的模式选择。

在该部分,首先需要定义存储默认状态的量,如上图所示,存储各个图片的默认值为null。Description参数为属性的说明注释,Category属性为当前该属性所属的类,下面定义的函数为将用户选择的参数进行返回和获取的一个过程,用户定义的属性名即函数名。

函数体为常见的{get;set;}形式:

该部分将用户选择的参数赋值给之前定义的图片文件,至此为止属性已经简单的添加完毕,如将该文件编译得到的dll文件导入库中进行使用,我们会发现,拖出来的按钮控件下面已经多了上面定义的所有属性。

       

但是这些属性还并没有用,只是简单的进行了赋值,要让这些属性进行动作,需要在按钮中添加新的事件。这里我们添加了两个事件,一个是鼠标按下的事件,还有一个鼠标弹起的按键:

上面的部分就是简单的一些按钮属性设置,比如将按钮背景变透明之类的。

添加的新的事件中,我们需要对按钮的相应动作进行相应,在按下时获得按下时的图片,在弹起时获得弹起时的图片即可。

这里buttonflag为定义的一个public变量,用户可以在使用Click事件中判断是否开启成功,若没有开启成功可以将该变量置为原来的值,按钮相应的也不会发生变化。

state用来判断该按钮是否是单次点击的按钮,如果是,那弹起时还是原来的图片。有些按键没有按下时的图片,也不予变化。

至此为止,一个新的封装已经制作完毕,将该文件编译为dll并加载到工程中就能看到效果了,下面是测试效果图:

这是一个带按下动画的按钮。

这是一个不带按下动画的按钮。

这是一个单次点击的按钮。

总结

到此这篇关于C#创建自定义控件及添加自定义属性和事件使用的文章就介绍到这了,更多相关C#创建自定义控件及添加自定义属性和事件使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#窗口实现定时关机系统

    C#窗口实现定时关机系统

    这篇文章主要为大家详细介绍了C#窗口实现定时关机系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • C#实现鼠标裁剪图像功能

    C#实现鼠标裁剪图像功能

    这篇文章主要为大家详细介绍了C#实现鼠标裁剪图像功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • 如何使用Dapper处理多个结果集与多重映射实例教程

    如何使用Dapper处理多个结果集与多重映射实例教程

    Dapper类是一个开源的数据库操作类,下面这篇文章主要给大家介绍了关于如何使用Dapper处理多个结果集与多重映射的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-09-09
  • C# dll代码混淆加密的实现

    C# dll代码混淆加密的实现

    本文主要介绍了C# dll代码混淆加密的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Unity实现俄罗斯方块(一)

    Unity实现俄罗斯方块(一)

    这篇文章主要介绍了Unity实现俄罗斯方块的第一部分代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • C#中实现查找mysql的安装路径

    C#中实现查找mysql的安装路径

    这篇文章主要介绍了C#中实现查找mysql的安装路径,本文讲解使用SQL语句查询出mysql的安装路径,方便在备份时使用,需要的朋友可以参考下
    2015-06-06
  • C#实现的Socket服务器端、客户端代码分享

    C#实现的Socket服务器端、客户端代码分享

    这篇文章主要介绍了C#实现的Socket服务器端、客户端代码分享,2个非常简单的入门例子,需要的朋友可以参考下
    2014-08-08
  • Revit API取得变量的内参名称实例代码

    Revit API取得变量的内参名称实例代码

    这篇文章介绍了Revit API取得变量的内参名称实例代码,有需要的朋友可以参考一下
    2013-11-11
  • C#实现逐行读取和写入文件的方法

    C#实现逐行读取和写入文件的方法

    这篇文章给大家介绍了使用C#语言实现同样的功能,即从输入文件中读取每行数据,然后将每行字段组合成SQL插入脚本,然后逐行写入另外一个空白文件中,感兴趣的朋友可以参考下
    2024-01-01
  • 详解Asp.Net MVC的Bundle捆绑

    详解Asp.Net MVC的Bundle捆绑

    这篇文章主要介绍了Asp.Net MVC的Bundle捆绑方法,具体实现方法给大家做代码整理,一起参考一下。
    2017-11-11

最新评论