交换两个PictureBoxes

时间:2015-12-31 15:17:57

标签: c# .net c#-4.0

我正在尝试用C#制作游戏2048,但是当我移动瓷砖时我遇到了问题。

这是我保留瓷砖的地方:

picture = new PictureBox[4, 4] {
               {pic1,pic2,pic3,pic4},
               {pic5,pic6,pic7,pic8}, 
               {pic9,pic10,pic11,pic12}, 
               {pic13,pic14,pic15,pic16} };

当我按下“W”时,我会将其向上移动:

public void Up()
    {
        for (int i = 1; i < picture.GetLength(0); i++)
            for (int j = 0; j < picture.GetLength(1); j++)
                if(picture[i,j].Image!=null && picture[i-1,j].Image==null)
                {
                    picture[i - 1, j].Image = picture[i, j].Image;
                    picture[i, j].Image = null;           
                    Up();       
                }

    }

但该代码只交换图片框中的图片而不是图片框本身。如何将图片框与图像及其所有属性互换?

1 个答案:

答案 0 :(得分:0)

C#中没有切换功能,因此您需要一个临时辅助变量。

由您决定要切换的内容:

  • 数组中引用的pictureBoxes
  • 只是他们的位置
  • 他们的图片
  • 或任何组合..

以下是一个简单的帮助函数示例,它交换引用及其位置:

void SwitchControls(PictureBox pb1, PictureBox pb2)
{
    PictureBox temp = pb1;
    Point tempLoc = pb1.Location;
    pb1 = pb2;
    pb2 = temp;
    pb1.Location = pb2.Location;
    pb2.Location = tempLoc ;
}

你可以这样称呼它:

SwitchControls(picture[i - 1, j], picture[i, j]);

要交换图像,您可以将功能写为

void SwitchImages(PictureBox pb1, PictureBox pb2)
{
    Image temp = pb1.Image;
    pb1.Image = pb2.Image;
    pb2.Image = temp.Image;
}

等。