控制器包裹在面板中

时间:2012-03-12 09:02:10

标签: c#

我有一个带按钮的面板。我的按钮是动态创建的。我希望有4行,每行4个按钮。但我只得到一排。

 foreach (CategoriesDataSet.CategoriesRow category in DataRepository.Categories.Categories)
        {
            if (!category.CategoryName.Equals("ROOT"))
            {
                SimpleButton button = new SimpleButton();
                button.Text = category.CategoryName;
                button.Tag = category.CategoryId;
                button.Size = new Size(82, 70);


                if (lastButton != null)
                    button.Left = lastButton.Right + 1;


                lastButton = button;
                button.Click += CategoryButtonClick;
                categoriesPanel.Controls.Add(button);
            }
        }

期望的结果:

x x x x
X x x x 
x x x x

2 个答案:

答案 0 :(得分:2)

这是Treb回答评论的答案 使用进行循环,并使用 modulo 运算符 Left 属性。

for (int i = 0; i < DataRepository.Categories.Categories.Count; i++)
{
    CategoriesDataSet.CategoriesRow category = DataRepository.Categories.Categories[i];

        if (!category.CategoryName.Equals("ROOT"))
        {
            SimpleButton button = new SimpleButton();
            button.Text = category.CategoryName;
            button.Tag = category.CategoryId;
            button.Size = new Size(82, 70);

            button.Left = i%4*82;
            button.Top = i*70;

            button.Click += CategoryButtonClick;
            categoriesPanel.Controls.Add(button);
        }
    }

答案 1 :(得分:1)

您只需通过调整Left属性向右移动按钮(水平):

button.Left = lastButton.Right + 1;

如果要将它们向下移动,则需要调整垂直位置:

button.Top = lastButton.Bottom + 1;

由于这样你保持水平位置不变,新按钮应该直接出现在最后一个按钮下面。

修改 在回答你的评论时,你想要哪个结果?是A)

X X X X

或B)

X
X  
X  
X  

或是C)

X
 X  
  X  
   X  

或者按行按钮,你的意思是D)

X | X | X | X

或E)

X - X - X - X