在网格布局中创建动态按钮 - 创建幻方 UI
Create dynamic buttons in a grid layout - Create a magic square UI
我应该使用 Windows 表单应用程序在 2D 中创建一个幻方。它应该是这样的:
但是,用户应该能够决定正方形的大小(3x3、5x5、7x7 等)。我已经在控制台应用程序中编写了代码,但我不知道如何添加 2D 图形。
有人已经问过这个问题 (How do I put my result into a GUI?),答案之一是使用 DataGridView
,但我不确定这是否是我要找的,因为我可以'让它看起来像图片。
有什么想法或建议吗?
您可以使用此 属性
创建一个表单并添加一个 TableLayoutPanel
tableLayoutPanel1.Dock = DockStyle.Fill;
tableLayoutPanel1.BackColor = Color.Gold;
这是结果
当您创建行和列时,以这种方式正确设置百分比:
在此之后,您可以在每个方块中添加一个按钮或标签。
您可以使用 TableLayoutPanel
并动态添加按钮到面板。
如果您不需要与按钮交互,您可以添加 Label
。
动态创建正方形:
public void CreateSquare(int size)
{
//Remove previously created controls and free resources
foreach (Control item in this.Controls)
{
this.Controls.Remove(item);
item.Dispose();
}
//Create TableLayoutPanel
var panel = new TableLayoutPanel();
panel.RowCount = size;
panel.ColumnCount = size;
panel.BackColor = Color.Black;
//Set the equal size for columns and rows
for (int i = 0; i < size; i++)
{
var percent = 100f / (float)size;
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, percent));
panel.RowStyles.Add(new RowStyle(SizeType.Percent, percent));
}
//Add buttons, if you have your desired output in an array
//you can set the text of buttons from your array
for (var i = 0; i < size; i++)
{
for (var j = 0; j < size; j++)
{
var button = new Button();
button.BackColor = Color.Lime;
button.Font = new Font(button.Font.FontFamily, 20, FontStyle.Bold);
button.FlatStyle = FlatStyle.Flat;
//you can set the text of buttons from your array
//For example button.Text = array[i,j].ToString();
button.Text = string.Format("{0}", (i) * size + j + 1);
button.Name = string.Format("Button{0}", button.Text);
button.Dock = DockStyle.Fill;
//If you need interaction with buttons
button.Click += b_Click;
panel.Controls.Add(button, j, i);
}
}
panel.Dock = DockStyle.Fill;
this.Controls.Add(panel);
}
如果您需要与按钮交互
void button_Click(object sender, EventArgs e)
{
var button = (Button)sender;
//Instead put your logic here
MessageBox.Show(string.Format("You clicked {0}", button.Text));
}
例如,您可以调用
CreateSquare(3);
截图:
我应该使用 Windows 表单应用程序在 2D 中创建一个幻方。它应该是这样的:
但是,用户应该能够决定正方形的大小(3x3、5x5、7x7 等)。我已经在控制台应用程序中编写了代码,但我不知道如何添加 2D 图形。
有人已经问过这个问题 (How do I put my result into a GUI?),答案之一是使用 DataGridView
,但我不确定这是否是我要找的,因为我可以'让它看起来像图片。
有什么想法或建议吗?
您可以使用此 属性
创建一个表单并添加一个 TableLayoutPaneltableLayoutPanel1.Dock = DockStyle.Fill;
tableLayoutPanel1.BackColor = Color.Gold;
这是结果
当您创建行和列时,以这种方式正确设置百分比:
在此之后,您可以在每个方块中添加一个按钮或标签。
您可以使用 TableLayoutPanel
并动态添加按钮到面板。
如果您不需要与按钮交互,您可以添加 Label
。
动态创建正方形:
public void CreateSquare(int size)
{
//Remove previously created controls and free resources
foreach (Control item in this.Controls)
{
this.Controls.Remove(item);
item.Dispose();
}
//Create TableLayoutPanel
var panel = new TableLayoutPanel();
panel.RowCount = size;
panel.ColumnCount = size;
panel.BackColor = Color.Black;
//Set the equal size for columns and rows
for (int i = 0; i < size; i++)
{
var percent = 100f / (float)size;
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, percent));
panel.RowStyles.Add(new RowStyle(SizeType.Percent, percent));
}
//Add buttons, if you have your desired output in an array
//you can set the text of buttons from your array
for (var i = 0; i < size; i++)
{
for (var j = 0; j < size; j++)
{
var button = new Button();
button.BackColor = Color.Lime;
button.Font = new Font(button.Font.FontFamily, 20, FontStyle.Bold);
button.FlatStyle = FlatStyle.Flat;
//you can set the text of buttons from your array
//For example button.Text = array[i,j].ToString();
button.Text = string.Format("{0}", (i) * size + j + 1);
button.Name = string.Format("Button{0}", button.Text);
button.Dock = DockStyle.Fill;
//If you need interaction with buttons
button.Click += b_Click;
panel.Controls.Add(button, j, i);
}
}
panel.Dock = DockStyle.Fill;
this.Controls.Add(panel);
}
如果您需要与按钮交互
void button_Click(object sender, EventArgs e)
{
var button = (Button)sender;
//Instead put your logic here
MessageBox.Show(string.Format("You clicked {0}", button.Text));
}
例如,您可以调用
CreateSquare(3);
截图: