C# Winform自定义控件与事件详解
创作时间:
作者:
@小白创作中心
C# Winform自定义控件与事件详解
引用
1
来源
1.
https://www.cnblogs.com/luyj00436/p/18382764
在开发桌面应用程序的过程中,有时候自带的控件样式或者功能上可能不一定能够满足我们的所有要求。这时候,我们需要自定义控件。本文将详细介绍如何在C# Winform中创建自定义控件和事件,包括创建类库项目、添加资源文件、设计用户控件、设置样式属性以及在其他项目中复用自定义控件的完整流程。
1. 创建类库项目
新建类库项目。注意选择“.NET Framework”。创建完成后,删除默认的Class1。
2. 把图标拖放到资源文件中
在类库中添加图标文件(这里是png结尾的两个文件)。右击项目的【属性】→【资源】,打开资源文件。将图片拖拽到资源文件,并保存,即可添加到Resources资源文件中。
3. 添加用户控件
右击【添加】→【新建项】,选择【用户窗体控件】。这里将命名BaseValue.cs。
4. 设置样式尺寸
右击【属性】,设置大小尺寸等。
这里,添加了一个 PictureBox和 Label控件。并设置及基础样式。
5. 修改代码
按F7进入代码修改页面。自定义属性和事件。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MyControlLib
{
public partial class BaseValue : UserControl
{
public BaseValue()
{
InitializeComponent();
}
private bool isRun;
[Category("自定义属性")]
[Description("阀门启动或关闭")]
public bool IsRun
{
get { return isRun; }
set {
if (value != isRun){
isRun = value;
if (isRun)
{
this.lb.Text = "已打开";
this.pictureBox1.Image = Properties.Resources.face;
}
else
{
this.lb.Text = "已关闭";
this.pictureBox1.Image = Properties.Resources.proof;
}
}
}
}
public event Action<bool> IsRunChanged;
[Category("自定义事件")]
[Description("阀门双击事件")]
private void picValue_DoubleClick(object sender, EventArgs e)
{
if(IsRunChanged == null)
{
IsRunChanged(isRun);
}
}
}
}
BaseValue
设置样式属性,减少控件使用的闪烁。
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.Selectable, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
- AllPaintingInWmPaint:如果为 true,则控件忽略窗口消息 WM_ERASEBKGND 以减少闪烁。 仅当将 UserPaint 位设置为 true 时,才应用此样式。
- CacheText:如果为 true,则控件将保留文本的副本,而不是每次必需时从 Handle 中获取。 此样式默认为 false。 此行为可提高性能,但很难保持文本同步。
- ContainerControl:如果为 true,则控件是类容器控件。
- DoubleBuffer:如果为 true,则在缓冲区中进行绘制,并且完成后将结果输出到屏幕。 双缓冲可以防止因重绘控件而引起的闪烁。 如果将 DoubleBuffer 设置为 true,则还应将 UserPaint 和 AllPaintingInWmPaint 设置为 true。
- EnableNotifyMessage:如果为 true,则将对发送到控件的 WndProc(Message) 的每个消息调用 OnNotifyMessage(Message) 方法。 此样式默认为 false。 EnableNotifyMessage 在部分信任中不起作用。
- FixedHeight:如果为 true,则控件在自动缩放时具有固定高度。 例如,如果布局操作尝试重新缩放控件以适应新的 Font,则控件的 Height 保持不变。
- FixedWidth:如果为 true,则控件在自动缩放时具有固定宽度。 例如,如果布局操作尝试重新缩放控件以适应新的 Font,则控件的 Width 保持不变。
- Opaque:如果为 true,则控件会绘制为不透明,且不绘制背景。
- OptimizedDoubleBuffer:如果为 true,则控件将首先绘制到缓冲区而不是直接绘制到屏幕,这可以减少闪烁。 如果将此属性设置为 true,则还应将 AllPaintingInWmPaint 设置为 true。
- ResizeRedraw:如果为 true,则控件会在调整大小时进行重绘。
- Selectable:如果为 true,则控件可以接收焦点。
- StandardClick:如果为 true,则控件实现标准 Click 行为。
- StandardDoubleClick:如果为 true,则控件实现标准 DoubleClick 行为。 如果未将 StandardClick 位设置为 true,则忽略此样式。
- SupportsTransparentBackColor:如果为 true,则控件接受 alpha 组件数小于 255 个的 BackColor 来模拟透明度。 仅当将 UserPaint 位设置为 true 且父控件从 Control 派生时,才会模拟透明度。
- UserMouse:如果为 true,则将由控件而不是操作系统处理其自身的鼠标事件。
- UserPaint:如果为 true,则会由控件而不是由操作系统来绘制控件自身。 如果 false,则不会引发 Paint 事件。 此样式仅适用于从 Control 派生的类。
- UseTextForAccessibility:指定控件的 Text 属性的值,若设置,则确定控件的默认 Active Accessibility 名称和快捷键。
6. 其他项目中复用自定义控件
其他项目,添加dll引用,并在工具箱中添加引用。即可在其他项目中复用自定义控件
热门推荐
30岁转行学编程,开启人生新阶段
如何打造一个独具魅力的个人品牌?
嵊州美食游:小笼包、年糕与越剧文化之旅
跟着苏东坡打卡宜兴最美自然风光
双子座暴躁指数揭秘:火爆程度有多高?
中科院专家解析:孩子社交抵触怎么办?
当孩子说“我害怕和别人说话”:如何应对儿童社交恐惧症
家庭环境如何塑造孩子的社交圈?
赶集习俗悄然回归,南昌市民感受独特新年氛围
客流叠加、车票紧张,厦门铁路迎来节前客流高峰
《封神第二部》上映,原著粉怒了!
《封神第二部:战火西岐》上映:口碑两极分化,票房突破7亿
如何处理工资卡遗失后的补办流程?这种流程有哪些安全保障措施?
如何处理工资卡遗失后的补办流程?这种流程有哪些安全保障措施?
松江新桥镇摄影攻略:从自然风光到城市建筑
雪窦山:宁波最美自然景观推荐
秋冬自驾游宜兴,邂逅金色的银杏美景
秋日自驾游:阳澄湖莲花岛&崇明岛
南通必打卡:天下第一鲜(文蛤)
南通冬雪美食之旅:边走边吃,尽享地道风味
西亭脆饼:南通百年名点的十八层美味
独立性至上,与白羊座和谐相处的关键指南
白羊座为何总是"易燃易爆"?揭秘背后的情绪秘密!
赵本山2025新作演技解析:从董事长到大侠,多面演绎展艺术魅力
银行卡状态异常是什么意思?银行卡状态异常自动解除,看这篇够了
海南东方深度旅游攻略:行程安排、费用预算及景点推荐
南岳衡山冬季雾凇奇景,你准备好去打卡了吗?
南岳衡山:五岳独秀,火文化与红叶共舞
小白如何购车?多看攻略,慢慢摸索!
宝马对经销商实行补贴减免背后:价格战下汽车经销商陷入生存困境