要开发自己的控件,有几种方法:
复合控件(Composite Controls):将现有的各种控件组合起来,形成一个新的控件,来满足用户的需求。
扩展控件(Extended Controls):就是在现有的控件基础上,派生出一个新的控件,增加新的功能,或者修改原有功能,来满足用户需求。
自定义控件(Custom Controls):就是直接从System.Windows.Forms.Control类派生,也就是说完全由自己来设计、实现一个全新的控件,
这是最灵活、最强大的方法,但是,对开发者的要求也是最高的。要实现一个自定义控件,必须为Control类的的OnPaint事件编写代码,
在OnPaint事件中实现自定义控件的绘制工作。同时,还可以重写Control类的WndProc方法,来处理底层的Windows消息。所以说,要实现一个自定义控件,对开发者的要求较高,要求开发者必须了解GDI+和Windows API的知识。
按钮升级(通过组件类扩展控件)
1.创建类库文件
2.在新建类库中添加组件类
3.进入代码视图
4.在组件类引用中添加System.Windows.Forms;引用,并引入命名空间
5. public partial class HxButton :Button//把继承的基础类改为按钮
6.//现在额外添加一些属性功能。
//1.首先添加一些枚举图标类型,后续有新的图片可以继续添加
//对本属性添加注解,便于调用时候能够看懂意思
[Browsable(true)]
[Category("附加属性")]
[Description("显示的图片选项")]
public enum buttonImage
{
None,
up,
down,
right,
left, //分别对应上下左右三个图标
stop,
start
}
//2.依据上面定义枚举类型,创建一个枚举的变量
private buttonImage imageType;
//3.基于上面的枚举变量,创建一个按钮属性
public buttonImage ImageType
{
get { return imageType; }
set
{
imageType = value;
switch (imageType)
{
case buttonImage.None:
this.Image = null;//图标为空
this.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;//则文本在按钮居中
break;
case buttonImage.up:
this.Image = Properties.Resources.up;//图标为资源中的名称是up的图标
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;//则图标在按钮居左
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;//则文本在按钮居右
break;
case buttonImage.down:
this.Image = Properties.Resources.down;//图标为资源中的名称是down的图标
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;//则图标在按钮居左
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;//则文本在按钮居右
break;
case buttonImage.right:
this.Image = Properties.Resources.right;//图标为资源中的名称是right的图标
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;//则图标在按钮居左
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;//则文本在按钮居右
break;
case buttonImage.left:
this.Image = Properties.Resources.left;//图标为资源中的名称是left的图标
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;//则图标在按钮居左
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;//则文本在按钮居右
break;
case buttonImage.stop:
this.Image = Properties.Resources.stop;//图标为资源中的名称是stop的图标
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;//则图标在按钮居左
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;//则文本在按钮居右
break;
case buttonImage.start:
this.Image = Properties.Resources.start;//图标为资源中的名称是start的图标
this.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;//则图标在按钮居左
this.TextAlign = System.Drawing.ContentAlignment.MiddleRight;//则文本在按钮居右
break;
default:
break;
}
}
}
数值显示(复合控件)
1.在一个类库中,添加一个用户控件类
2.拖拽一个布局容器 TableLayoutPanel,此复合控件需要2个进行组合,所以只需要2列布局
3.分别拖2个label标签,用来放数据和单位,可以分别更改名称和初始值,调整下样式
4.在代码中添加属性,当在代码中属性被当作字段使用时,会进入死循环而无法生成
//1.添加组合控件属性:通讯连接的PLC中变量名称
[Browsable(true)]
[Category("附加属性")]
[Description("下位硬件对应变量名称")]
public string PlcValueName { get; set; }
//2.添加组合控件属性:显示的数值
private string show_Value = "0.0";//赋予初始值给私有字段 Show_N 是label1标签名称
[Browsable(true)]
[Category("附加属性")]
[Description("显示参数,字符串格式")]
public string Show_Value
{
get { return show_Value; }
set
{
show_Value =value;
Show_N.Text = show_Value;
}
}
//3.添加组合控件属性:显示的单位
private string show_单位 = "mm";//赋予初始值给私有字段
[Browsable(true)]
[Category("附加属性")]
[Description("显示单位,字符串格式")]
public string Show_单位
{
get { return show_单位; }
set
{
show_单位 = value;
Show_C.Text = show_单位;//Show_C 是label2标签名称单位区域控件
}
}
//4.添加组合控件属性:数值区域所占比例
private float value_Scale =0.7f;//赋予初始值给私有字段,定义占比70百分之
[Browsable(true)]
[Category("附加属性")]
[Description("数值区域所占比例,0-1之间")]
public float Value_Scale
{
get { return value_Scale; }
set
{
value_Scale = value;
//将当前控件的总长度乘以比例值赋值给容器中数值所占宽度值
tableLayoutPanel1.ColumnStyles[0].Width = value_Scale * this.Width;
//剩下的就是容器中单位所占宽度值
tableLayoutPanel1.ColumnStyles[1].Width = this.Width-value_Scale * this.Width;
}
}
//5.添加组合控件属性:数值字体属性
private Font value_Font = new Font("宋体",10.5f,FontStyle.Bold);//实例化一个字符字段,设置字体
[Browsable(true)]
[Category("附加属性")]
[Description("数值字体")]
public Font Value_Font
{
get { return value_Font; }
set
{
value_Font = value;
Show_N.Font = value_Font;
}
}
//6.添加组合控件属性:数值字体属性
private Font unit_Font = new Font("宋体", 10.5f, FontStyle.Bold);//实例化一个字符字段,设置字体
[Browsable(true)]
[Category("附加属性")]
[Description("单位字体")]
public Font Unit_Font
{
get { return unit_Font; }
set
{
unit_Font = value;
Show_C.Font = unit_Font;
}
}
//7.添加事件,数值变化事件
public delegate void HxValueDelegate(object sender, EventArgs e);//创建委托
[Browsable(true)]
[Category("附加事件")]
[Description("数值区域字符串改变")]
public event HxValueDelegate HxValueChanged;//创建事件
//将原始的标签数值改变事件,传给我们自己定义数值改变的事件即可
private void Show_N_TextChanged(object sender, EventArgs e)
{
HxValueChanged?.Invoke(this, new EventArgs());
}
苏州零基础学员怎样学机器视觉
苏州电工基础学员如何学机器视觉
苏州PLC基础学员如何学机器视觉
苏州C#与工业自动化培训
苏州C#高级语言培训
苏州C#上位机培训
苏州C#上位机培训
苏州上位机软件开发培训
苏州上位机培训
苏州C#与PLC通信培训
苏州上位机界面开发培训
苏州C#与三菱PLC培训
苏州C#与运动控制卡SDK通信培训
苏州C#与西门子PLC通信软件开发培训
苏州C#与相机SDK培训
苏州C#与ABB六轴机器人联动培训
苏州C#与爱普生EPSON四轴机器人联动培训
苏州C#与数据库培训(sqlite,mysqlsever,access)
苏州C#与工业机器人通信培训
苏州工业机器人培训
苏州ABB工业机器人培训
苏州ABB六轴工业机器人编程培训
苏州EPSON四轴机器人编程培训
苏州C#与halcon机器视觉培训
苏州halcon机器视觉培训
苏州机器视觉培训
苏州机器视觉软件开发培训
苏州视觉培训
苏州视觉软件开发培训
苏州C#视觉软件开发培训
苏州C#与halcon联合机器视觉软件开发培训
苏州C#与halcon机器视觉培训
苏州CCD机器视觉培训
苏州机器视觉检测培训
苏州运动控制卡+机器视觉培训
苏州双相机机器视觉培训
苏州9点标定视觉培训
苏州手眼标定视觉培训
苏州智能视觉培训
苏州工业相机软件开发培训
苏州相机镜头选型培训
苏州视觉检测光源打光培训
苏州ABB机器人与halcon机器视觉应用
苏州C#联合halconABB工业机器人培训
苏州C#视觉引导ABB工业机器人培训
苏州C#视觉引导epson工业机器人培训
苏州C#视觉引导三轴运动培训
苏州C#三轴运动控制培训
苏州2D+3D视觉系统培训
苏州CCD机器视觉项目实战培训班
苏州halconCCD机器视觉项目培训
苏州halcon手眼标定抓取培训
苏州halcon软件应用培训
苏州visipro软件培训
苏州海康视觉软件开发培训
苏州Halcon视觉软件培训
苏州C#与CCD机器视觉项目实战培训班
苏州C#与halconCCD机器视觉项目培训
苏州C#与halcon手眼标定抓取培训
苏州halcon软件应用培训
苏州visipro软件培训
苏州海康视觉软件开发培训
苏州C#halcon软件应用培训
苏州C#与visipro机器视觉软件培训
苏州C#工业软件培训
苏州机器视觉引导机器人抓取培训
苏州视觉定位培训
苏州视觉缺陷检测培训
苏州机器视觉模板匹配定位培训
苏州SCL编程培训
苏州PLC培训
苏州PLC编程培训
苏州三菱plc培训
苏州西门子plc培训
苏州三菱plc培训(FX3U/FX5U)
苏州西门子plc培训(s7-200smart/s7-1200/s7-1500)
版权所有:江苏和讯自动化设备有限公司所有 备案号:苏ICP备2022010314号-1
技术支持: 易动力网络