删除C#中的所有PictureBox

时间:2017-01-07 15:40:15

标签: c# visual-studio-2015

我正在创建一个经典的蛇游戏,我需要将电路板从原始尺寸缩小到较小的电平板,因为电平增加,我目前得到的是我设法调整电路板的大小,但未使用的PictureBox仍然存在且无法删除它们。我在如何删除和调用使用新变量重新创建PictureBox的方法时遇到了麻烦。

真的很感激,如果有人可以帮我解决我在C#中删除/删除PictureBox的问题。以下是我的项目源代码的一些部分。查看整个源代码,可以直接向我索取。

这里放置了我的代码,用于重新创建/刷新电路板。

private void gotoNextLevel(int nextLevel)
    {
        mode = "REST";
        mySnake = new Snake(mainBoard); //Brand new snake with length 1
        apples = new Rewards(nextLevel, mainBoard); //<--- Generate 5 apples
    }

以下是我为游戏制作棋盘的方法。

int maxRow = 10, maxCol = 20;       //Max 10 rows, and 20 columns in the board
    int squareSize = 30;                //Each square is 30px by 30px

    PictureBox[,] squares;

    public Board(Form mainForm)
    {
        squares = new PictureBox[maxRow, maxCol];
        for (int row = 0; row < maxRow; row++)
        {
            for (int col = 0; col < maxCol; col++)
            {
                squares[row, col] = new PictureBox();
                squares[row, col].Location = new Point(col * squareSize, row * squareSize);
                squares[row, col].Height = squareSize;
                squares[row, col].Width = squareSize;
                squares[row, col].SizeMode = PictureBoxSizeMode.StretchImage;
                squares[row, col].BackColor = Color.DarkGray;
                squares[row, col].BorderStyle = BorderStyle.FixedSingle;

                mainForm.Controls["boardPanel"].Controls.Add(squares[row, col]);
            }
        }
        mainForm.Controls["controlPanel"].Location = new Point(mainForm.Controls["boardPanel"].Location.X, mainForm.Controls["boardPanel"].Location.Y + mainForm.Controls["boardPanel"].Height + 20);
    }

这是刷新方法。

private void refresh(Object myObject, EventArgs myEventArgs)
    {
        mySnake.move(mode); //Move the snake based on mode
        modeLBL.Text = mode;

        mainBoard.draw();
        apples.draw();  //<----- draw apples
        mySnake.draw();

        //increment the duration by amount of time that has passed
        //this method is called every speed millisecond
        duration += speed;
        timerLBL.Text = Convert.ToString(duration / 1000); //Show time passed


        //Check if snke is biting itself. If so, call GameOver.
        if (mySnake.checkEatItself() == true)
        {
            GameOver();
        }
        else if (apples.checkIFSnakeHeadEatApple( mySnake.getHeadPosition()) == true)
        {
            score += apples.eatAppleAtPostion(mySnake.getHeadPosition());

            scoreLBL.Text = Convert.ToString(score);


            if (apples.noMoreApples() == true)
            {
                clock.Stop();
                level++;
                levelLBL.Text = Convert.ToString(level);
                gotoNextLevel(level);
                MessageBox.Show("Press the start button to go to Level " + level, "Congrats");
            }
            else
            {
                //Length the snake and continue with the Game
                mySnake.extendBody();
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

首先:是Visual Studio本身生成的refresh()的签名吗?如果是这样,为什么不复制正文并将其放入没有参数的新方法中,因为显然你甚至不使用当前refresh()方法中的那些。

其次:如果你创建了这个新方法,你可以创建一个方法,首先清除控件,然后调用重绘。我认为它不会被重新绘制,因为它是一个来自控件的事件,因为你刚刚清除了所有控件,所以它永远不会被再次调用。

最后但并非最不重要:如果你有其他控件而不是PictureBox,但你只想删除PictureBox,你可以使用它:

var link = www.example.com/idontknowthelink& some?stuff; var splitLink = link.split('&'); console.log(splitLink[0] + splitLink[1]);