欢迎光临
我们一直在努力

c#自定义控件开发实例(2)-.NET教程,C#语言

建站超值云服务器,限时71元/月

源文件:http://ded.nuaa.edu.cn/download/windows%20extended%20controls.rar

示例代码:http://ded.nuaa.edu.cn/download/windowsapplication6.rar

下面讲一下控件具体如何工作,首先要写他的属性以及重写他的属性,

private color _bordercolor=new color();

[defaultvalue("black"),description("边框颜色"),category("appearance")]

public color bordercolor

{

get

{

// insert code here.

return _bordercolor;

}

set

{

_bordercolor=value;

this.invalidate();

}

}

defaultvalue:设定默认值,description:描述,就是属性下面的说明,category:属性分类.其他的同理

设置好属性以后应该重写他的绘制过程,也就是

protected override void onpaint(painteventargs pe)

{

// calling the base class onpaint

base.onpaint(pe);

redrawcontrol(pe.graphics);

}

private void redrawcontrol(graphics graphics)

{

try

{

//绘制边框

rectangle rectborder=new rectangle();

pen borderpen=new pen(this._bordercolor,1);

rectborder.x = 7;

rectborder.y = 7;

rectborder.height = this.height-15;

rectborder.width = this.width-15;

graphics.drawrectangle(borderpen, rectborder);

//绘制编辑框

if (_resizeble)

{

drawselector(graphics);

}

}

catch(exception e)

{

throw e;

}

finally

{

graphics.dispose();

}

}

[description("控件选择区域"),category("behavior")]

public rectangle selectrectangle

{

get

{

rectangle selectrectangler=new rectangle();

selectrectangler.x = this.location.x+7;

selectrectangler.y = this.location.y+7;

selectrectangler.height = this.height-15;

selectrectangler.width = this.width-15;

return selectrectangler;

}

}

redrawcontrol中定义了rectangle (矩形),让后填充改矩形的边框:graphics.drawrectangle(borderpen, rectborder);,这里要说明的是边框外面还有编辑框,所以大小不是控件的大小。drawselector就是绘制8个选择框的,基本和绘制边框差不多,即使定义好坐标就可以了。干好了之后不要忘了释放资源:graphics.dispose();

selectrectangle:控件所选择的rectangle,最终要得就是它了

ok,这样一个基本的东西出来了,下面我们要写他的move和resize函数了,先添加事件:

this.resize += new system.eventhandler(this.shapeex_resize);

this.mouseup += new system.windows.forms.mouseeventhandler(this.shapeex_mouseup);

this.mousemove += new system.windows.forms.mouseeventhandler(this.shapeex_mousemove);

this.mouseleave += new system.eventhandler(this.shapeex_mouseleave);

this.mousedown += new system.windows.forms.mouseeventhandler(this.shapeex_mousedown);

原理:当鼠标点击的时候this.mousedown,记录鼠标的位置,控件的原始位置和大小,判断位置:_rectleftbottomselector.contains(e.x,e.y):表示点击的是左下,设置鼠标,记录状态this._selectselctedindex:判断点击了那个选择框,取值0-8:0代表移动整个控件,1是右上移动,2-8顺时针索引选择框。this.mousemove处理如何改变控件的大小和位置

case 0://只移动位置

this.location=new point(cursor.position.x-(_mouselocation.x-_selflocation.x),cursor.position.y-(_mouselocation.y-_selflocation.y));

break;

1,5不仅移动位置,还改变大小,2,3,4,6,7,8只改变大小

其他则是清理工作。

好了,那么赶紧编译。生成就可以了。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » c#自定义控件开发实例(2)-.NET教程,C#语言
分享到: 更多 (0)