Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将面板绑定到窗体_C#_Winforms - Fatal编程技术网

C# 将面板绑定到窗体

C# 将面板绑定到窗体,c#,winforms,C#,Winforms,我正在制作一个海战游戏,其中船只隐藏在一个带有标签阵列的面板中。此标签数组需要有更多或更少的行和列,具体取决于所选的难度级别 因此,我创建了一个新类“Gameboard”,其中定义了面板和标签数组。 问题是我不知道如何将我在这个类中制作的面板绑定到窗体上 namespace SO_S2_Programmeren_Groep08 { class GameBoard{ Panel pnlSlagveld; private Label[,] lblArray; private int row; pr

我正在制作一个海战游戏,其中船只隐藏在一个带有标签阵列的面板中。此标签数组需要有更多或更少的行和列,具体取决于所选的难度级别

因此,我创建了一个新类“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());
}

}
namespace SO\u S2\u Programmeren\u Groep08{
类游戏板{
面板pnlSlagveld;
自有品牌[,]lblArray;
私人int row;
私有int列;
公共标签[,]LblArray{
获取{
回蓝;
}
集合{
lblArray=数值;
}
}
公共int行{
获取{返回行;}
设置{row=value;}
}
公共int列{
获取{return column;}
设置{column=value;}
}
公共游戏板(int行,int列){
this.row=行;
this.column=列;
CreateAbleArlay(行、列);
}
公共游戏局(){
这一行=7;
该列=9;
CreateAbleArlay(行、列);
}
私有void CreateLabelArray(int-ingrow,int-ingcolumn){
pnlBattleField=new System.Windows.Forms.Panel();
lblArray=新标签[ingrow,ingcolumn];
int xpos=0;
int-ypos=0;
对于(int row=0;row
}

如果你想看更多的课程,请询问


谢谢

您可以执行以下操作之一:

  • 将“GameBoard”设置为表单,然后将面板添加到该表单中。如果您想这样做,我建议您创建一个windows窗体项目(如果您还没有),并将此代码添加到主窗体(或添加的新窗体)的代码中,以便您拥有窗体的设计器组件和所有visual studio功能

  • 将其设为usercontrol并将该usercontrol添加到表单中。如果您想这样做,我将向项目中添加一个新的用户控件,并再次将此代码添加到该用户控件中,以便获得VisualStudio支持

  • 在游戏板内部创建一个
    新表单()
    ,并将其添加到该表单中。(这与winforms中的标准表单实践相反,而且您不会得到那么多IDE帮助,因此我不会建议新程序员使用此方法)


  • 您可以执行以下操作之一:

  • 将“GameBoard”设置为表单,然后将面板添加到该表单中。如果您想这样做,我建议您创建一个windows窗体项目(如果您还没有),并将此代码添加到主窗体(或添加的新窗体)的代码中,以便您拥有窗体的设计器组件和所有visual studio功能

  • 将其设为usercontrol并将该usercontrol添加到表单中。如果您想这样做,我将向项目中添加一个新的用户控件,并再次将此代码添加到该用户控件中,以便获得VisualStudio支持

  • 在游戏板内部创建一个
    新表单()
    ,并将其添加到该表单中。(这与winforms中的标准表单实践相反,而且您不会得到那么多IDE帮助,因此我不会建议新程序员使用此方法)


  • 您能给我看一下将面板添加到表单中的代码行吗?我不习惯使用Windows窗体应用程序:/
    formsomeform=。。。;someForm.Controls.Add(somePanel)
    但是你可能不想这样做,你想稍微重组一下你的程序。你能给我看一下将面板添加到表单中的代码行吗?我不习惯使用Windows窗体应用程序:/
    formsomeform=。。。;someForm.Controls.Add(somePanel)但您可能不想这样做,您想稍微重组一下您的程序。谢谢!我希望面板在另一个类中定义的原因是Form.cs已经有很多代码(船只必须随机放置在labelarray上),所以也许最好将这些代码移到另一个类中,而不是“GameBoard”@David,这就是为什么我有第2点,听起来它最适合你们。这可以被认为是一个复杂的“组件”,它与表单的其余部分分离,并且可以添加到该表单中。当然,您可以进入表单控件并执行一个
    控件。添加(somePanel)
    ,当然可以。非常感谢!我想我明白了。。虽然这将是最简单的部分:)我将它添加到我的表单中。Designer.cs:Gameboard board=new Gameboard();board.Controls.Add(board.PnlGameboard);每次我换到另一个级别时,前一个面板位于新创建的面板的顶部:/previus面板上的“null”有什么建议吗?谢谢谢谢我希望面板在另一个类中定义的原因是Form.cs已经有很多代码(船只必须随机放置在labelarray上),所以也许最好将这些代码移到另一个类中,而不是“GameBoard”@David,这就是为什么我有第2点,听起来它最适合你们。这可以被认为是一个复杂的“组件”,它与表单的其余部分分离,并且可以添加到该表单中。当然,您可以进入表单控件并执行一个
    控件。添加(somePanel)
    ,当然可以。非常感谢!我想我明白了。。而且