它从用户那里获取一个数字n
,并在表单上为此按钮制作n
* n
按钮。
运行代码时,表单上仅显示第一行,而不是所有n
行。
private void button1_Click(object sender, EventArgs e)
{
int n = Convert.ToInt32(textBox1.Text.ToString());
Button[,] v = new Button[n, n];
for (int i = 0; i < n; i++)
{
int top = 60;
int left = 160;
int width = 25;
for (int j = 0; j < n; j++)
{
Button c= new Button();
c.Top =top ;
c.Left= left;
c.Width = width;
v[i, j] = c;
left += c.Width + 2;
}
top += 2;
left = 160;
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
this.Controls.Add(v[i, j]);
}
}
}
答案 0 :(得分:1)
您要在每个循环中重置top变量,所有按钮都位于相同的top位置。将top变量的初始化移到第一个循环之外
private void button1_Click(object sender, EventArgs e)
{
int top = 60;
int n = Convert.ToInt32(textBox1.Text.ToString());
Button[,] v = new Button[n, n];
for (int i = 0; i < n; i++)
{
// int top = 60;
......
但是,您只将顶部增加2个像素。这还不足以避免用下一行覆盖一行按钮。您需要在内部循环的末尾至少增加25个像素。
....
top += 25;
left = 160;
}
答案 1 :(得分:0)
您还可以使用for
循环来设置top
和left
属性值(可以在for
循环中定义和增加多个变量)。
对于每个row
,我们将top
的值增加height + padding
(填充是按钮之间的间隙),对于每个col
,我们将{{ 1}}由left
。
我们还可以在创建按钮时将其添加到控件集合中,而不是将其添加到数组中,然后在该数组上再次进行迭代,并且可以向width + padding
添加一些输入验证假设为正数,如果用户输入的内容无效,则会向用户显示一个消息框。
鉴于此,我们可以将代码简化为:
textbox.Text