c# - 自动在表单上安排无限数量的按钮

标签 c# winforms algorithm

我正在尝试动态生成一堆按钮。按钮的数量取决于有多少坑还活着,这是从数据库中检索的。

这是它的样子:

buttons

这是我用来生成它们的:

private void Form1_Load(object sender, EventArgs e)
{
    int numOf = pits.numOfPits();
    Button[] genButtons = new Button[numOf];
    int l = 1;
    for (int i = 0; i < numOf; i++)
    {

        genButtons[i] = new Button();
        genButtons[i].Width = 160;
        genButtons[i].Height = 80;
        Point location = new Point((i + 1) *200,75);

        if (location.X > this.ClientSize.Width - 200)
        {
            location.X = l * 200;
            location.Y += 100;
                l++;
        }
        genButtons[i].Location = location;  
        this.Controls.Add(genButtons[i]);
    }
}

问题是它只适用于 2 行并且有点硬编码。我怎样才能改进它以支持无限数量的按钮。

为了这个问题的目的,你可以忽略表单的有限“高度”。稍后我可能会添加一些分页。

最佳答案

将按钮控件添加到 FlowLayoutPanel .扩展 FlowLayoutPanel 以包括每页项目、当前页面和数据以实现分页。

private void Form1_Load(object sender, EventArgs e)
{
    FlowLayoutPanel flp = new FlowLayoutPanel();
    for (int i = 0; i < pits.numOfPits(); ++i)
    {
        Button btn = new Button();
        btn.Width = 160;
        btn..Height = 80; //set padding or margin to appropriate values
        flp.Controls.Add(btn);
    }
    this.Controls.Add(flp);
}

关于c# - 自动在表单上安排无限数量的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37217450/

相关文章:

c# - Amazon SES 电子邮件地址未验证

c# - 如何在用户按下文本框内的回车键时不关闭表单

c# - 为什么 Browsable 属性使属性不可绑定(bind)?

algorithm - 寻找具有已知解决方案的欧几里德 TSP 示例

c# - 我的第一个 .net 网络应用程序——我应该直接使用 MVC 框架吗(c.f. ASP.net)

C#/WPF : Idea how to display the last row of a ListView separately?

c# - 回滚先前提交的事务

c# - 从隐藏的控制台应用程序显示表单

基于比较的算法性能

java - 返回两个 int[][] 数组且未获得 java.lang.ArrayIndexOutOfBoundsException : -1 error 的技术