我在表单上添加了几个按钮。在代码中我设置了一些按钮属性:
class DigitButton : Button
{
private static int digitBtnTag;
public DigitButton()
: base()
{
this.Size = new Size(30, 30);
this.Tag = digitBtnTag;
this.Text = (this.Tag).ToString();
this.Margin = new Padding(2);
this.Padding = new Padding(2);
digitBtnTag++;
}
}
在MainForm.cs中我有
for (int i = 0; i < dgtBtns.Length; i++)
{
dgtBtns[i] = new DigitButton();
dgtBtns[i].Click += new EventHandler(this.digitButtonClick);
digitPanel.Controls.Add(dgtBtns[i]);
}
因此,当我启动一个程序时,我在一个地方看到了所有按钮:尽管属性保证金,但仍在digitPanel上显示(0; 0)。那么为什么不是所有这些按钮都能在不同的方向上自动“推”出来呢?以及如何制作它?
答案 0 :(得分:2)
这不是控件在c#中的工作方式。我猜你有点编程java,因为jave中的布局很有用,但在c#中只做
for (int i = 0; i < dgtBtns.Length; i++)
{
dgtBtns[i] = new DigitButton();
dgtBtns[i].Location = new Point(50, 50 * i); // Multiplying by i makes the location shift in every loop
dgtBtns[i].Click += new EventHandler(this.digitButtonClick);
digitPanel.Controls.Add(dgtBtns[i]);
}
您必须通过尝试查看位置参数并查看
答案 1 :(得分:2)
您是否尝试使用FlowLayout Panel?
此外,此视频可能有所帮助: Windows Forms Controls Lesson 5: How to use the FlowLayout Panel
答案 2 :(得分:0)
您需要定义Left和Top,然后在每次循环时添加按钮高度或宽度以正确定位按钮,即
int bTop=0;
int bLeft=0;
for (int i = 0; i < dgtBtns.Length; i++)
{
dgtBtns[i] = new DigitButton();
dgtBtns[i].Click += new EventHandler(this.digitButtonClick);
dgtBtns[i].Top = bTop;
bTop += dgtBtns[i].Height;
digitPanel.Controls.Add(dgtBtns[i]);
}