c#实现组件的运行时缩放(一)

原创 2007年10月04日 22:24:00

最近老是在什么拖放、缩放、移动上面作文章,其实还真说不上有什么技术含量, 但又不想半途而废,最终其实我是想做一个类似于grove提供的那种可视化的SQL生成器的操作环境,代替自己之前在公司做的一个组件的操作方式,象这个样子:

grove

数据表添加到窗口之后可以移动位置和缩放大小。因为不是工作任务,完全是信马由缰在零零碎碎地做着玩。那之前已经把运行时移动组件的问题解决了,现在考虑组件缩放的问题。其实《在运行时通过鼠标拖动移动控件位置及改变控件的大小 》这个转贴中是有了一种解决方法的,但反正是随意地做,就想着换换方法,就当作学习C#。我是从c++Builder转到VS 开发环境来的,如果不是公司的要求,我还真愿意继续使用c++Builder。c++Builder是一个完全可视化的开发环境,任何组件都可以采用所见即所得的方式来布置在窗体内的位置,我非常习惯于将鼠标点到某个控件上,这个控件的边角上就会显示几个操作用的句柄,把鼠标移动到句柄上就会根据句柄所在的不同的位置显示不同的鼠标光标,就象这个样子:,实际上要对控件进行缩放,是用鼠标操作这几个句柄实现的。干脆自己也这么做做看好了。其实上面这个Button的贴图是测试程序运行的效果。程序一点也不复杂,先把基本的代码贴上来,控制缩放的代码做完之后再贴。

  public partial class ControlResizeHandle : UserControl
    
...{
        
私有成员#region 私有成员
        
private const int WIDTHANDHEIGHT = 5;
        
private Control _ctrl = null;
        
private ControlResizeHandlePosition _handlePostion;
        
#endregion

        
公共属性#region 公共属性
        
public ControlResizeHandlePosition HandlePostion
        
...{
            
get ...return _handlePostion; }
            
set ...{ _handlePostion = value;}
        }

        
public Control Ctrl
        
...{
            
get ...return _ctrl; }
            
set 
            
...
                _ctrl 
= value;
                
this.Parent = _ctrl.Parent;
                SetPosition();
            }

        }

        
#endregion

        
私有方法#region 私有方法
     
        
private void OnMouseEnter(object sender, EventArgs e)
        
...{
            SetCursor();
        }

        
private void SetCursor()
        
...{
            
this.Visible = false;
            
if (_ctrl != null)
            
...{
                
switch (_handlePostion)
                
...{
                    
case ControlResizeHandlePosition.Right:
                        
this.Cursor = Cursors.SizeWE;
                        
break;
                    
case ControlResizeHandlePosition.RightBottom:
                        
this.Cursor = Cursors.SizeNWSE;
                        
break;
                }

            }

            
this.Visible = true;
        }

   
        
#endregion

        
构造函数#region 构造函数
        
public ControlResizeHandle()
        
...{
            InitializeComponent();
        }

        
public ControlResizeHandle(ControlResizeHandlePosition handlePosition)
        
...{
        
            
this.Width = WIDTHANDHEIGHT;
            
this.Height = WIDTHANDHEIGHT;
            
this.BorderStyle = BorderStyle.FixedSingle;
            _handlePostion 
= handlePosition;
            MouseEnter 
+= OnMouseEnter;
        }

        
#endregion

        
公共方法#region 公共方法
        
public void SetPosition()
        
...{
            
if (_ctrl != null)
            
...{
                
this.Left = _ctrl.Left + _ctrl.Width;

                
switch (_handlePostion)
                
...{
                    
case ControlResizeHandlePosition.Right:
                        
this.Top = _ctrl.Top + _ctrl.Height / 2 - this.Height / 2;
                        
break;
                    
case ControlResizeHandlePosition.RightBottom:
                        
this.Top = _ctrl.Top + _ctrl.Height - this.Height / 2;
                        
break;
                }

            }

        }

        
#endregion


    }

除了自定义的UserControl,还另外定义了一个枚举来设定当鼠标移动到组件上时显示的鼠标光标

public enum ControlResizeHandlePosition ...{ Right,RightBottom};

,正是这个光标让我不能把Ctrl属性设为static,因为我在Ctrl属性被赋值之后调用了SetPosition方法将组件的位置定位在控件的周围,而SetPosition却使用了这个非静态的枚举变量,破坏了静态方法对变量的引用规定。

ExtJS4 组件缩放

效果图:  { xtype : 'form', region : 'center', layout : { type : 'accordion', titleCollapse : ...
  • qq_17505335
  • qq_17505335
  • 2016年08月26日 17:51
  • 232

C#实现GDI+基本图的缩放、拖拽、移动

C#实现GDI+基本图元的缩放、拖拽、移动 C#实现GDI+基本图元的缩放、拖拽、移动示例代码如下: using System; using System.Collections.Generi...
  • LongtengGensSupreme
  • LongtengGensSupreme
  • 2016年07月16日 14:59
  • 2314

C#实现图片鼠标拖动和滚动缩放

对于一个图片查看器来说,鼠标拖动和滚动缩放也就是说可以鼠标在程序界面上拖动图片,通过鼠标滚轮放大和缩小图片。这两种功能在图片浏览程序里面再普通不过了。那怎么用C#来进行实现。 通过操作你也知道,缩放的...
  • kongfl888
  • kongfl888
  • 2012年12月08日 23:40
  • 3869

C#图像显示实现拖拽、锚点缩放功能

1.图像拖拽 核心步骤: ①新建Point类型全局变量mouseDownPoint,记录拖拽过程中鼠标位置。 ②MouseDown事件记录Cursor位置 ③MouseMove事件计算移动矢量,并更新...
  • xuelinytianyi
  • xuelinytianyi
  • 2014年12月29日 23:17
  • 2307

在运行时通过鼠标拖动移动控件位置(c#)

前些日子因为工作需要想了解有关于在C#下实现运行时鼠标移动控件的方法,Google了一下还真找到了一个帖子,粗略看去代码还真不少,感觉有点复杂的样子,因为当时手头上还有点别的事情,没来得及细看,就把帖...
  • dekko
  • dekko
  • 2007年09月24日 08:43
  • 18526

C#实现图片缩放(包括缩略图和旋转)

using System; using System.Collections; using System.Drawing; using System.Drawing.Imaging; using Sy...
  • linybo
  • linybo
  • 2015年06月24日 13:04
  • 1461

C# 窗口缩放 自定义控件缩放

在C#中使用自定义控件时,如果放大和缩小
  • u010141025
  • u010141025
  • 2014年07月16日 23:08
  • 2326

C#图像中心缩放与移动

C#中使用Graphics可以很方便的绘图,在绘完图后,往往需要对图进行缩放和移动。缩放时,将鼠标当前的位置作为缩放的中心来缩放,看效果图 中心缩放的核心在于计算图形新的原点,请看代码 publ...
  • xxdddail
  • xxdddail
  • 2017年04月18日 16:07
  • 1965

C#中的运行时类型与编译时类型

今天在看C#参考时明白了 什么是C#的运行时类型与编译时类型,记录下来,以备查阅:相信很多刚学C#的人都对这两个概念感到迷惑,其时并不难(以前太重于技术可用性,比如:asp.net中的DataDrid...
  • alpsboy
  • alpsboy
  • 2006年09月05日 18:08
  • 2752

在C#中实现图片缩放(含asp.net用鼠标滚轮实现图片缩放)

//************************************************************// //下面给出三个简单的方法,后面两个方法是扩展,估计有时用得着 ...
  • wonsoft
  • wonsoft
  • 2010年07月13日 22:56
  • 3727
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c#实现组件的运行时缩放(一)
举报原因:
原因补充:

(最多只允许输入30个字)