saybody 发表于 2013-1-26 12:39:48

C#基础系列:开发自己的窗体设计器(实现控件的选择)

所谓控件的选择,就是在设计器上某个控件被选中或者控件获得焦点(通过Tab调整控件焦点)的时候,在控件的四周显示出调整手柄。
如下图:
http://p.blog.csdn.net/images/p_blog_csdn_net/RonoTian/EntryImages/20081028/%E9%80%89%E6%8B%A9%E6%8E%A7%E4%BB%B6.jpg

<span style="">如上,通过控件的调整手柄,我们可以调整控件的宽度和高度。而实现这个调整手柄的关键点其实得益于vs2005控件的灵活性。因为这8个正方形的调整手柄其实就是8个控件。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

所以我们本文的重点如下:
1、开发自定义的调整手柄控件,也就是这正方形控件;
2、组合这8个调整手柄控件,目标是使设计器上的控件与调整手柄完全解耦,调整手柄能够不做任何的修改就可以应用于所有的控件;
3、设计器上的控件与调整手柄的对应方法,也就是选择控件的时候,能够在控件周围显示调整手柄。


下面我们针对这3个重点,在前一篇《在容器上拖动鼠标增加控件》的基础上,实现控件的选择功能。


1、开发自定义的调整手柄控件:
这其实属于自定义控件开发的问题,你首先增加“用户控件”,把控件名命名为UISizeDot,把下面的代码直接拷贝进去就可以了,所以我不做过多的描述,这里直接把代码贴出来好了。
<span style=""><div class="highlighter">
[*]
[*]publicpartialclassUISizeDot:Control
[*]{
[*]privatebool_movable;
[*]privatePenpen=newPen(Color.Black);
[*]
[*]publicUISizeDot()
[*]{
[*]InitializeComponent();
[*]SetStyle(ControlStyles.UserPaint,true);
[*]SetStyle(ControlStyles.AllPaintingInWmPaint,true);
[*]SetStyle(ControlStyles.OptimizedDoubleBuffer,true);
[*]
[*]this.TabStop=false;
[*]this._movable=true;
[*]}
[*]
[*]///<summary>
[*]///UISizeDot的边框颜色
[*]///</summary>
[*]publicColorBorderColor
[*]{
[*]get{returnpen.Color;}
[*]set
[*]{
[*]this.pen=newPen(value);
[*]this.Refresh();
[*]}
[*]}
[*]
[*]protectedoverridevoidOnPaint(PaintEventArgspe)
[*]{
[*]//TODO:在此处添加自定义绘制代码
[*]//this.BackColor=Color.White;
[*]pe.Graphics.DrawRectangle(pen,0,0,this.Width-1,this.Height-1);
[*]
[*]//调用基类OnPaint
[*]base.OnPaint(pe);
[*]}
[*]
[*]publicboolMovable
[*]{
[*]get{returnthis._movable;}
[*]set{this._movable=value;}
[*]}
[*]}
页: [1]
查看完整版本: C#基础系列:开发自己的窗体设计器(实现控件的选择)