2012-04-19 2 views
2

Я делаю игру Seabattle, где корабли скрыты в панели с массивом меток. Этот массив меток должен иметь больше или меньше строк и столбцов в зависимости от выбранного уровня сложности.Связывание панели с формой

Итак, я создал новый класс «Gameboard», в котором определены панель и массив меток. Проблема заключается в том, что я не могу понять, как связать панель я делаю в этом классе в форме ..

namespace SO_S2_Programmeren_Groep08 { 
class GameBoard{ 

Panel pnlSlagveld; 
private Label[,] lblArray; 
private int row; 
private int column;  

public Label[,] LblArray { 
    get { 
    return lblArray; 
    } 
    set { 
    lblArray = value; 
    } 
} 

public int Row { 
    get { return row; } 
    set { row = value; } 
} 

public int Column { 
    get { return column; } 
    set { column = value; } 
} 

public GameBoard(int row, int column) { 
    this.row = row; 
    this.column = column; 
    CreateLableArray(row, column); 
} 

public GameBoard() { 
    this.row = 7; 
    this.column = 9; 
    CreateLableArray(row, column); 
} 

private void CreateLableArray(int ingrow, int ingcolumn) { 
    pnlBattleField = new System.Windows.Forms.Panel(); 
    lblArray = new Label[ingrow, ingcolumn]; 
    int xpos = 0; 
    int ypos = 0; 

    for (int row = 0; row < ingrow; row++) { 

    for (int column = 0; column < ingcolumn; column++) { 
     lblArray[row, column] = new Label(); 
     lblArray[row, column].Left = xpos; 
     lblArray[row, column].Top = ypos; 
     lblArray[row, column].Width = 50; 
     lblArray[row, column].Height = 50; 

     lblArray[row, column].Tag = (char)('A' + column) + (row + 1).ToString(); 
     lblArray[row, column].Click += lblArray_Click; 
     lblArray[row, column].BackColor = Color.Aqua; 
     lblArray[row, column].BorderStyle = BorderStyle.FixedSingle; 

     pnlBattlefield.Controls.Add(lblArray[row, column]); 

     xpos += lblArray[row, column].Width; 
    } 
    ypos += lblArray[row, 0].Width; 
    xpos = 0; 
    } 
}/*CreateLableArray*/ 

private void lblArray_Click(object sender, EventArgs e) { 
    MessageBox.Show("Clicked on Label " + ((Label)sender).Tag.ToString()); 
} 

} 

}

Если вы хотели бы видеть больше классов, пожалуйста, спрашивайте!

Спасибо!

+0

Не могли бы вы показать мне строку кода, которая добавляет панель в форму? Я не привык работать с Windows Forms Application:/ – David

+0

'Form someform = ...; someForm.Controls.Add (somePanel); 'Но вы, вероятно, не хотите этого делать, вы хотите немного перестроить свою программу. – Servy

ответ

0

Вы могли бы сделать один из них:

  1. Make «GameBoard» форму, а затем добавить панель в этой форме. Если бы вы хотели сделать это, я бы предложил создать проект форм Windows (если вы еще этого не сделали) и добавить этот код в код основной формы (или новой формы, которую вы добавляете), чтобы у вас были компоненты дизайнера и все функции визуальной студии в форме.

  2. Сделайте это usercontrol и добавьте этот usercontrol в форму. Если вы захотите это сделать, я добавлю новый пользовательский элемент управления в проект и снова добавлю этот код в этот usercontrol, чтобы вы получили визуальную поддержку студии.

  3. Создайте new Form() внутри вашего игрового поля и добавьте его в это. (Это противоречит стандартным формам в winforms, и вы не получите столько же IDE-справки, поэтому я бы не предложил это для нового программиста).

+0

Спасибо! Причина, по которой я хочу, чтобы панель была определена в другом классе, состоит в том, что Form.cs уже имеет много кода (корабли должны быть помещены случайным образом на ярлыке) Так что, может быть, лучше переместить этот код для другого класса, а не для «GameBoard» – David

+0

@ David Вот почему у меня есть точка № 2, которая, по-видимому, лучше всего подходит вам. Это можно считать сложной «составляющей», которая отделена от остальной части формы и может быть добавлена ​​к этой форме. Конечно, вы можете просто войти в элемент управления формы и, конечно же, сделать «Controls.Add (somePanel)». – Servy

+0

Спасибо большое! Я думаю, что я понял, что это будет легко. – David