c# - 我如何在 C# 中添加按钮?

标签 c# winforms user-interface multidimensional-array

我正在尝试创建一个扫雷游戏,但在第一个障碍就摔倒了;创建按钮网格。我有一个 2D 按钮阵列,我正在尝试将按钮添加到 Form1。我最好通过手动对按钮进行编码来做到这一点。但如果有一种方法可以在设计器中创建按钮,然后将它们添加到 2DArray,那么我想这也可以。

所以这基本上是我的问题。如果我在设计器中创建按钮,我不知道如何将它们分配给二维数组。如果我只是手动创建一个二维按钮阵列,我不知道如何将它们添加到窗口中。

这是我到目前为止所得到的。我不知道用什么来代替问号。

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]);
                }
            }

        }
    }


}

最佳答案

方法如下:编写 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 和 j 数字,你可以在 common 点击事件中取回它们我也创建了 abd 连接:

  Point ij = bt.Tag as Point;

创建一个或两个单独的功能,如 Mark 展示的那样也是一个好主意:您只想创建一次按钮,但稍后您会想要为下一轮重置它们。

还值得考虑将它们放在一个容器中,例如 Panel 以帮助进行样式设置和布局。为此,只需将 this 替换为容器控件名称即可!

最后:我对 Minefield 已经不是很熟悉了,所以我不知道每个地雷应该能够存储多少数据。 如果你想用Buttons存储数据,最好创建一个Mine类;它将包括坐标、字段状态和可能的邻居数据,也可能包括 Mine 负责的方法。正如我写的那样,一个(即珍贵的)Tag 字段被“浪费”了一个简单的二整数结构..

关于c# - 我如何在 C# 中添加按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39996957/

相关文章:

c# - 在 C# 中创建数据表

c++ - 对话过程未收到 WM_COMMAND

java - 以编程方式布局标签和按钮

cocoa - 在 cocoa 中,如何重新排序一个窗口,使其位于所有其他窗口之上?

c# - 替换c#中的字符串字符

c# - Automapper ResolveUsing 原因 "Can' t 将此解析为可查询表达式”

c# - LINQ:检查字段 (db) 是否包含 ILIST 中的项目?

.net - 查找并关闭 WPF 窗口的所有子窗口

c# - 如何将所有者窗口传递给 Show() 方法重载?

c# - 有没有办法阻止 WinForms 设计器默认控制 Load 事件