如何自动定位面板上的按钮c#

时间:2013-09-16 10:01:55

标签: c# visual-studio-2010

我在表单上添加了几个按钮。在代码中我设置了一些按钮属性:

    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)。那么为什么不是所有这些按钮都能在不同的方向上自动“推”出来呢?以及如何制作它?

3 个答案:

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