我在Form中放入了两个picturebox(分别为picturebox1,picturebox2),
然后分别将图片Load进了picturebox1,和picturebox2 
其中picturebox2为一个小图片,我需要放置在picturebox1上,
然后我想通过拖动picturebox1中的图片让picturebox2跟着动
我移动的不是控件,而是picturebox1中的图片。
现在已经能够在picturebox1中将图片拖动,但是不能实现让picturebox2随着picturebox中的图片拖动而随动。希望大虾们能帮忙看一看,先谢过了!

解决方案 »

  1.   

    一个都可以动了。另一个为什么不行?一样绘制,设置Image属性不就可以了?你代码贴来看看。
      

  2.   

     Point M_pot_p = new Point();//原始位置
            int M_int_mx = 0, M_int_my = 0;//下次能继续
            int M_int_maxX, M_int_maxY;//加快读取用        public FrmPicControl()
            {
                InitializeComponent();
                base.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true);
                base.SetStyle(ControlStyles.ResizeRedraw | ControlStyles.Selectable, true);        }        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
            {
                Bitmap tmpbmp = (Bitmap)this.pictureBox1.Image;
                M_pot_p = e.Location;
                M_int_maxX = pictureBox1.Width - tmpbmp.Width;
                M_int_maxY = pictureBox1.Height - tmpbmp.Height;
                Cursor = Cursors.SizeAll;
            }        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left)//当按左键的时候
                {
                    //算差值
                    Bitmap tmpbmp = (Bitmap)this.pictureBox1.Image;
                    M_int_mx = M_int_mx - M_pot_p.X + e.X;
                    M_int_my = M_int_my - M_pot_p.Y + e.Y;
                    //锁定范围
                    M_int_mx = Math.Min(0, Math.Max(M_int_maxX, M_int_mx));
                    M_int_my = Math.Min(0, Math.Max(M_int_maxY, M_int_my));
                    
                    Graphics g = pictureBox1.CreateGraphics();
                    g.DrawImage(tmpbmp, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height), new Rectangle(-M_int_mx, -M_int_my, pictureBox1.Width, pictureBox1.Height), GraphicsUnit.Pixel);                M_pot_p = e.Location;
                }
                else
                {
                    Cursor = Cursors.Default;
                }
            }
      

  3.   

    pictureBox1_MouseMove这个方法中。你更新完后,执行
    Graphics g2 = pictureBox2.CreateGraphics();
    g2.DrawImage(...
    g2.Dispose();
    不可以么?
      

  4.   

    先谢谢  wuyazhe (逍遥兄) 
     
      

  5.   

    我想应该不需要重绘图片吧 因为我只是要空间移动 ,而不是picturebox2中的图片移动
    我想通过拖动picturebox1中的图片让picturebox2跟着动
      

  6.   

    移动控件不就是修改控件的left和top属性么?
      

  7.   

    怎么叫做跟着动?太抽象了。picturebox1不就是把图片移动了?那你picturebox2不移动怎么叫跟着动?
      

  8.   

    picturebox1中的图片 是一张很大的图 因为picturebox1中显示不下 我先通过拖动来让其显示出来 而picturebox2是一个死的点 ,我不需要让picturebox2中的图片动,我只要拖动大图的同时 picturebox2跟着动,更简单的理解是 我picturebox1中的图片移动了多少 我picturebox2这个控件就要移动多少
      

  9.   


    不太明白这个 能不能说明白一点 或者提供部分代码。我想再补充一下,我要的效果类似google地图,我的picturebox1就好比一张大地图,而picturebox2就是地图中的一个省市,我要在移动大地图的同时,让省市那个点 跟着地图一起拖动,显示为一张完整的地图
      

  10.   

    要不你发你的测试项目给我,我帮你看看,回头达到你希望的效果了呢,你回来帖子里总结一下,如何。
    [email protected]
      

  11.   

    既然你可以重画PIC1的图片  肯定知道他的坐标对吧,,
    你只要把这个坐标复制给 PIC2的location不就可以了么?
      

  12.   


    你指的是哪个坐标? pic1 的坐标还是图片的坐标
      

  13.   


    肯定是图片的坐标了,,,你不是说拖动图片 图片移动 pic1 不是不动么
    你让他变一直不动的坐标 合适么?
      

  14.   

    谢谢大家  我换了一个开源的控件MapWinGIS