我正在尝试创造一个扫雷游戏,并在第一个障碍时摔倒了;创建按钮网格。我有一个2D数组按钮,我试图将按钮添加到Form1。我最好通过手动编码按钮来实现这一点。但是如果有一种方法可以在设计器中创建按钮然后将它们添加到2DArray那么我认为这样就可以了。
所以这基本上是我的问题。如果我在设计器中创建按钮,我不知道如何将它们分配给2D数组。如果我只是手动创建一个2D数组按钮,我不知道如何将它们添加到窗口。
这是我到目前为止所得到的。我不知道用什么来代替问号。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Minesweeper2
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
Button[,] But = new Button[10, 10];
for (int i = 0; i <= 9; i++)
{
for (int j = 0; j <= 9; j++)
{
But[i, j] = new Button();
????.Add(But[i, j]);
}
}
}
}
}
答案 0 :(得分:2)
在您的代码中,您应该在Form1
课程内添加按钮,而不是Program
。
正如我从这段代码中看到的,它是一个WindowsForms应用程序,所以将你的代码移到 Form1 类。
您可以在Form1类中创建一些函数 PostInitialization()。
private void PostInitialization() {
Button[,] buttons = new Button[10, 10];
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
Button button = new Button();
// change *button* properties here if needed
buttons[i, j] = button;
this.Controls.Add(buttons[i, j]);
}
}
}
在 Form1 构造函数中的InitializaComponent
函数之后完全调用它。
答案 1 :(得分:2)
以下是如何操作:编码Form1.cs
,而不是Program.cs
文件!
这里写的可能是这样的:
Button[,] But = new Button[10, 10];
public Form1()
{
InitializeComponent();
Size sz = new Size(30, 30);
for (int i = 0; i <= 9; i++)
{
for (int j = 0; j <= 9; j++)
{
But[i, j] = new Button();
But[i, j].Size = sz;
But[i, j].Location = new Point(sz.Width * i, sz.Height * j);
But[i, j].Click += Buttons_Click;
But[i, j].Tag = new Point(i, j);
this.Controls.Add(But[i, j]);
}
}
}
private void Buttons_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
// ..
}
您可以看到我之后添加了几行来帮助:Tag
包含i&amp; j号码,你可以在我创建的常见点击事件中重新获得它们:
Point ij = bt.Tag as Point;
创建一个或两个单独的功能,如标记显示也是一个好主意:您只想创建一次按钮,但稍后您将需要为下一轮重置它们。
还值得考虑将它们放在容器上,例如Panel
以帮助设置样式和布局。为此,只需用容器控件名称替换this
!
最后:我不再熟悉Minefield了,所以我不知道每个矿应该能存储多少数据。 如果您希望使用Buttons
正确存储数据,最好创建Mine class
;它将包括坐标,字段状态和可能是邻居数据,也可能是我可以识别的方法。正如我所写的那样,一个(即珍贵的)Tag
字段被“浪费”了,只有两个-integer struture ..