编程语言应用

注册

 

发新话题 回复该主题

锐视开源测控平台技术指南手把手教你制 [复制链接]

1#
北京痤疮医院那家好 http://baijiahao.baidu.com/s?id=1689204421470077907&wfr=spider&for=pc

需求描述

在平常的项目需求中,除了C#本身自带的一些控件,我们可能还需要更多的自定义性质的控件,那么如何去创建一个自定的控件,就是我们需要讨论的问题。

关键词

自定义控件,C#,测试测量界面

应用详述

当我们在网上免费资源中获得一些比较精美的图片,希望将其制作成希望的控件,需要如何操作呢?

1)首先我们有了如下按钮图片,如图1所示。

图1按钮图片

建立一个C#窗体应用程序,主窗体起名为JYSwitchDemo,向解决方案中再加入一个用户控件,起名为JYSwitch。

图2解决方案资源管理

2)控件做好后,会出现在内

图3在工具箱的显示

修改JYSwitch.cs的代码

a.修改构造函数

这些属性修改基本上都是常规套路模式,是为刷新方便而启用的。所以在使用过程中直接复制和粘贴就可以。

publicJYSwitch()

{

InitializeComponent();

//设置Style支持透明背景色并且双缓冲

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);

this.SetStyle(ControlStyles.UserPaint,true);

this.BackColor=Color.Transparent;

//鼠标移动到控件时变成手型

this.Cursor=Cursors.Hand;

//初始生成时候的大小

this.Size=newSize(87,27);

//注册控件单击事件

this.Click+=newSystem.EventHandler(this.JYSwitch_Click);

}

b.添加自定义属性

在JYSwitch的类中,添加两种属性

第一个属性是:是否被选中(Checked)

第二个是:Switch显示样式(CheckStyleX)

添加下面的代码:

boolisCheck=false;

///summary

///是否选中

////summary

publicboolChecked

{

set{isCheck=value;this.Invalidate();}

get{returnisCheck;}

}publicenumCheckStyle

{

style1,

style2,

style3,

style4,

};

CheckStylecheckStyle=CheckStyle.style1;

///summary

///样式

////summary

publicCheckStyleCheckStyleX

{

set{checkStyle=value;this.Invalidate();}

get{returncheckStyle;}

}

c.添加自定义事件

添加一个事件就是checked值改变事件,添加如下的代码:

///summary

///事件

////summary

publiceventEventHandlerCheckChanged;

///summary

///单机按钮事件

////summary

///paramname="sender"/param

///paramname="e"/param

privatevoidJYSwitch_Click(objectsender,EventArgse)

{

isCheck=!isCheck;

this.Invalidate();

//这个需要在外部去定义才可以使用,这才是真正的内容

if(CheckChanged!=null)

{

//TODO

CheckChanged(sender,e);

}

}

这边调用本身的Click事件,如果我们在MainForm程序中注册了CheckChanged则会发出该事件,否则不会发出该事件。

d.重新绘制图片

1.首先将我们准备的好的图片导入到项目程序当中,点击Resources.resx

2.进入后添加资源→添加现有文件

3.选择已有图片,如图X所示。

4.可以生成对应的Resources.Deisgner.cs,并查看其命名控件的内容

图4导入图片到资源管理中

e.重载函数OnPaint,就是重新改变画图函数

protectedoverridevoidOnPaint(PaintEventArgse)

{

BitmapbitMapOn=null;

BitmapbitMapOff=null;

if(checkStyle==CheckStyle.style1)

{

bitMapOn=global::JYSwitchDemo.Properties.Resources.垂直开;

bitMapOff=global::JYSwitchDemo.Properties.Resources.垂直关;

}

elseif(checkStyle==CheckStyle.style2)

{

bitMapOn=global::JYSwitchDemo.Properties.Resources.垂直开2;

bitMapOff=global::JYSwitchDemo.Properties.Resources.垂直关1;

}

elseif(checkStyle==CheckStyle.style3)

{

bitMapOn=global::JYSwitchDemo.Properties.Resources.按钮开;

bitMapOff=global::JYSwitchDemo.Properties.Resources.按钮关;

}

elseif(checkStyle==CheckStyle.style4)

{

bitMapOn=global::JYSwitchDemo.Properties.Resources.水平开;

bitMapOff=global::JYSwitchDemo.Properties.Resources.水平关;

}

Graphicsg=e.Graphics;

Rectanglerec=newRectangle(0,0,this.Size.Width,this.Size.Height);

if(isCheck)

{

g.DrawImage(bitMapOn,rec);

}

else

{

g.DrawImage(bitMapOff,rec);

}

}

3)测试代码程序

编写完自定义控件之后进行编译,会在工具栏之后出现我们所做的自定义控件。将其拖出来。同时可以看见,控件的属性窗口和事件窗口中出现我们添加的属性和事件。

图5测试开关按钮

图6按钮属性以及事件

只要改变属性中CheckstyleX就可以修改我们按钮开关的样式了,十分方便!同时,可以将项目中输出类型进行改变,只要改变到类库输出,那么我就可以生成我们想要的dll,在其他程序中也可以使用了。

图7

程序下载

手把手教你制作第一个C#

分享 转发
TOP
发新话题 回复该主题