楼主 的效果 
类似 连连看吧 
可以 参考这个http://www.cndip.com/soft/2/2006/D153175164741.html

解决方案 »

  1.   

    GDI+
    看设计模式的享元模式,三言两语给你讲不清.
      

  2.   

    写一个链接连个BUTTON之间线的函数,参数是BUTTON1和Button2的坐标,然后在按钮移动完成后调用函数,声明两个INT变量,记录移动前的坐标
    public void PirntLine(int x1,int y1,int x2,int y2)
    {
    Graphics g=this.CreateGraphics();
    g.Clear(this.BackColor);//清空连线
     //判断是否连线,看看是否移动,判断现在的按钮1和2的X坐标是否等于原来的坐标
    if(x1!=tmpx || x2!=tmpx1) 
    {
    if(MessageBox.Show("按钮移动,是否连线?","提示",MessageBoxButtons.YesNo)==DialogResult.Yes) //提示移动,是否连线
    {
    g.DrawLine(new Pen(Color.Red,2),x1,y1,x2,y2);
    }
    } }PirntLine(button1.Left,button1.Top,button2.Left ,button2.Top); //移动完成后调用函数 private int tmpx; //记录移动前的坐标,button1.left private int tmpx1;//记录移动前的坐标, button2.left