2013-03-21 4 views
-2

나는이 튜토리얼을 따라 C# 퍼즐 게임을 만들었다. http://jetgamedev.blogspot.ro/2012/05/lesson-0229-c-lab-4-create-image-puzzle.html.VS C# 퍼즐 게임

내 문제는 튜토리얼의 77 단계에서 어떤 PictureBox 클래스도 찾을 수 없으므로 Form1을 부모 클래스로 추가했습니다. 나는이 오류가 어디 지금은 단계 86에서 오전 :

Cannot implicitly convert type 'PuzzleImage.MyPictureBox' to 'System.Windows.Forms.PictureBox' 

문제는 다음 줄에 있습니다 :

private void PlayLevel() 
    { 
     if (pictureBoxWhole != null) 
     { 
      groupboxPuzzle.Controls.Remove(pictureBoxWhole); 
      pictureBoxWhole.Dispose(); 
      pictureBoxWhole = null; 
     } 
     if (picBoxes == null) 
     { 
      images = new Image[currentLevel]; 
      picBoxes = new PictureBox[currentLevel]; 
     } 
     int numRow = (int)Math.Sqrt(currentLevel); 
     int numCol = numRow; 
     int unitX = groupboxPuzzle.Width/numRow; 
     int unitY = groupboxPuzzle.Height/numCol; 
     int[] indice = new int[currentLevel]; 
     int i = 0; 
     for (i = 0; i < currentLevel; i++) 
     { 
      indice[i] = i; 
      if (picBoxes[i] == null) 
      { 
       picBoxes[i] = new MyPictureBox(); 
       picBoxes[i].Click += new EventHandler(OnPuzzleClick); 

       picBoxes[i].BorderStyle = BorderStyle.Fixed3D; 

      } 
      picBoxes[i].Width = unitX; 
      picBoxes[i].Height = unitY; 

      ((MyPictureBox)picBoxes[i]).Index = i; 


      CreateBitmapImage(image, images, i, numRow, numCol, unitX, unitY); 

      picBoxes[i].Location = new Point(unitX * (i % numCol), unitY * (i/numCol)); 
      if (!groupboxPuzzle.Controls.Contains(picBoxes[i])) 
       groupboxPuzzle.Controls.Add(picBoxes[i]); 


     } 
     suffle(ref indice); 
     for (i = 0; i < currentLevel; i++) 
     { 
      picBoxes[i].Image = images[indice[i]]; 
      ((MyPictureBox)picBoxes[i]).ImageIndex = indice[i]; 
     } 
    } 
: 여기
picBoxes[i] = new MyPictureBox(); 
((MyPictureBox)picBoxes[i]).Index = i; 
((MyPictureBox)picBoxes[i]).ImageIndex = indice[i]; 

문제 소스 코드의 일부이다

감사합니다.

+0

'MyPictureBox' 란 무엇입니까? 그것은 무엇으로부터 물려 받습니까? – Oded

+0

이 클래스는 76 단계에서 만든 클래스입니다. – user2194683

+2

"내 문제는이 튜토리얼의 77 단계에서 어떤 PictureBox 클래스도 찾을 수 없으므로 Form1을 부모 클래스로 추가했습니다." 'MyPictureBox'가'Form1'을 상속 받았다면 작동하지 않을 것입니다. 'include System.Windows.Forms'을 추가하면 상속받을'PictureBox'가 있어야합니다. –

답변

1

picBoxesPictureBox의 배열입니다. 각 요소의 유형은 PictureBox입니다.

picBoxes[i] = new MyPictureBox(); 

호환되지 않는 유형을 지정하려고 :

는이 라인을 가지고있다. 당신이 그것을 변경하는 경우

:

picBoxes[i] = new PictureBox(); 

이 작동합니다.

+0

네, 그렇지만 단계 86에서 이렇게 말합니다 : Form1.cs로 이동, PlayLevel 함수로 이동, PictureBox를 대체하기 위해 MyPictureBox 사용 – user2194683

+1

77 단계는'class MyPictureBox : PictureBox'입니다. 나는 OP가 작동하지 않는다고 말하려고하고 있다고 생각합니다. 내 생각 엔 클래스 네임 스페이스에 대한 참조가 필요합니다. – LarsTech

+0

@LarsTech - 명시적일 수는 없지만 필자는'PictureBox' 선언의 _ 발생을 _ MyPictureBox'로 변경할 예정이라고 생각합니다. – Oded