2012-04-19 75 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窗体应用程序:/ – David 2012-04-19 14:14:20

+0

'Form someform = ...; someForm.Controls.Add(somePanel);'但你可能不想这样做,你想重新调整你的程序一点点。 – Servy 2012-04-19 14:15:46

回答

0

你可以执行下列操作之一:

  1. 使“游戏键盘”形式,然后将面板添加到该表单。如果你想这样做,我会建议创建一个Windows窗体项目(如果你还没有),并将此代码添加到主窗体(或添加的新窗体)的代码中,以便拥有设计器组件和所有的窗体的视觉工作室功能。

  2. 使其成为usercontrol并将该usercontrol添加到窗体。如果你想这样做,我会为项目添加一个新的用户控件,并再次将该代码添加到该用户控件中,以便获得visual studio支持。

  3. 在您的游戏板内创建一个new Form()并将其添加到该文件中。 (这与winforms中的标准形式实践相反,并且你不会得到尽可能多的IDE帮助,所以我不会为新程序员提出这个建议)。

+0

谢谢! 我想在另一个类中定义面板的原因是Form.cs已经有很多代码(船只必须随机放置在labelarray上) 所以也许最好是移动代码到另一个类而不是“GameBoard” – David 2012-04-19 14:19:08

+0

@David这就是为什么我有点#2,这听起来像是最适合你的。这可以被认为是与表单其余部分分离的复杂“组件”,并且可以添加到该表单中。当然你可以进入窗体控件,并确实做一个'Controls.Add(somePanel)'。 – Servy 2012-04-19 14:20:47

+0

非常感谢! 我想我已经想通了..并且这将会是容易的部分:) – David 2012-04-19 14:37:19