用GDI+在panel中画了很多图形,如何实现选择其中一个进行编辑

解决方案 »

  1.   

    首先你需要把所有元素进行记录,然后在mousedown中判断所属那个区域,才能进行编辑。
      

  2.   

    这个和我完全手工绘制出来的类似excel一样,选定单元格,你可以处理鼠标按下,移动的代码,将选择的区域改变,类似单元格的选区,本来想给你代码,只是代码太多了,意思你能明白就行了
      

  3.   

    谢谢二位,但感觉还是一头雾水,liujiwe79(独孤求胜)能把代码发我邮箱吗?[email protected],谢谢了
      

  4.   

    代码太大了,这是我们公司的商业产品,不好意思,我只能给你思路,我们用c#做了个类似excel的控件,完全手工绘制的,我只能给你提供思路
      

  5.   

    自己判断用些自己的算法或者都生成区域,判断点是否在区域中可见region.isVisible(point)
      

  6.   

    我最近在用C#写一个图形编辑器,类似于JAVA里的JEF,可惜还没写完,呵呵,写完了再share吧
      

  7.   

    http://www.codeproject.com/csharp/DrawTools.asp?df=100&forumid=115683&fr=26
      

  8.   

    这个问题我也想了好久  有点想法;
    每个图形都跟一个struct在字典中关联
    struct  Info{
    Point location;
    Size  size;}然后单击选择事件的
    private void panel_MouseDown(Object sender,MouseEventArgs e){      Point selectedPoint=new Point(e.x,e.y);
          Info selectItem=FindSelectedItem(selectedPoint);
    }public Info FindSelectedItem(selectedPoint){判断的代码}不过到这发现一个问题,窗口滚动后MouseEventArgs返回的坐标是不是还要进行处理呢?
      

  9.   

    lz:其实关键如何判断图形被选中的问题。对图形系统而言,一般建立抽象基类,定义一些抽象的方法,等待其派生类去实现,如:
    pulic class Shape
    {
    ....................
          public abstract bool Pick(PointF ptf);//返回真值,则说明点ptf能拾取到此图元
    .....................
    }这里已矩形为例实现:public class Rect :Shape
    {
    ...............
           public override bool Pick(PointF ptf, VectorCanvas canvas)
           {
               Rectangle rectf = new Rectangle(m_begin, m_end);
               return  rectf.Contains(ptf); 
           }
    }其他图形对象,都必须重写Pick方法,因为每类对象判断方法都不一样。