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却使用了这个非静态的枚举变量,破坏了静态方法对变量的引用规定。

在运行时通过鼠标拖动移动控件位置及改变控件的大小

public   class   Resize     {         bool   IsMoving=false;     int   ctrlLastWidth=0;     int   ct...
  • dekko
  • dekko
  • 2007年09月05日 11:23
  • 3089

C# 实现拖拉控件改变位置与大小

前言:   很多时候我们需要在运行时,动态地改变控件的位置以及大小,以获得更好的布局。比如说实际项目中的可自定义的报表、可自定义的单据等诸如此类。它们有个特点就是允许客户或者二次开发人员设计它们...
  • hugo20
  • hugo20
  • 2016年05月30日 00:30
  • 3755

利用C#更专业的实现运行时调整控件大小和位置

从Delphi、VB到现在的Visual Studio .Net可视化的控件式编程越来越简化我们的开发过程,对于控件的可视化操作必不可少。在Visual Studio .Net的IDE中开发桌面应用程...
  • MYsce
  • MYsce
  • 2017年05月24日 00:25
  • 1155

DELPHI程序运行时窗体设计器组件

  • 2005年09月13日 14:13
  • 101KB
  • 下载

tensorflow分布式运行时组件剖析

本节主要研读core/distributed_runtime目录.集中为分布式多节点之间通信,全局资源分配/管理,资源调度等问题.mgr: base_rendezvous_mgr: rendezv...

C#运行时创建控件与移动控件

  • 2017年03月31日 09:31
  • 2.35MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c#实现组件的运行时缩放(一)
举报原因:
原因补充:

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