我想做一个类似Rose这么一个东西。
但是,功能很简单。就是我从左面的区域Drag一个图形到右边的区域。
简单说比如一个类图的图标(一个矩形),在右面的区域可以移动它的位置,改变它的大小。
然后可以给它添加属性什么的。
请问有没有什么好的建议?
多谢大家!

解决方案 »

  1.   

    有个开源项目 FreeMind。你去 SourceForge .net 上查一下。它就是绘图类型的。是个思维导图的绘图软件。不是 .net 就是 java 程序。忘了。你看一下,大同小异吧。
      

  2.   

    http://dpatoolkit.sourceforge.net/
    看人家的开源项目。
      

  3.   

    屏幕截图:
    http://sourceforge.net/project/screenshots.php?group_id=124709
      

  4.   

    我觉得应该处理窗体的MouseDown,MouseMove,MouseUp事件,在处理方法中:
    判断鼠标左键是否被按下,判断鼠标位置是否在某个区域,
    如果满足上述2个条件,则改变窗体的位置。下面是代码示例:
    //首先定义辅助变量,它保存了窗体和鼠标相对于屏幕的位置
    private int form1Left;
    private int form1Top;
    private int mouseLeft;
    private int mouseTop;
    //用户可以拖动窗体的区域
    private Rectangle recTitle = new Rectangle( 0, 0, 100, 100 );
    //下面分别是事件处理方法
    //MouseMove事件中改变窗体的位置
            private void Form1_MouseMove(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left && recTitle.Contains(e.X,e.Y))
                {
                    this.Left = form1Left + (this.Left + e.X) - mouseLeft;
                    this.Top = form1Top +(this.Top+e.Y)-mouseTop;
                }
            }
    //MouseDown事件中保存初始的窗体和鼠标位置
            private void Form1_MouseDown(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left && recTitle.Contains(e.X,e.Y))
                {
                    form1Left = this.Left;
                    form1Top = this.Top;
                    mouseLeft = this.Left+e.X;
                    mouseTop = this.Top+e.Y;
                }
            }        private void Form1_MouseUp(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left && recTitle.Contains(e.X,e.Y))
                {
                    this.Left = form1Left + (this.Left + e.X) - mouseLeft;
                    this.Top = form1Top + (this.Top + e.Y) - mouseTop;
                }
            }转 自  :xrwang(无涯)