【问题标题】:Dynamic button creation & placing them in a predefined order using c#使用 c# 创建动态按钮并将它们按预定义的顺序放置
【发布时间】:2016-03-29 08:52:17
【问题描述】:

NET 4.5 C# 创建一个 windows 窗体。我想动态创建和添加按钮并为它们分配点击事件,但希望它们像图像一样以特定方式动态放置。

我的问题是如何以上述方式动态放置按钮,即 4x4 格式(一行 4 个按钮,4 列但无限行)。是否有可能以获胜形式这样做?

目前我正在尝试下面提到的代码,但不清楚如何放置如上所示的按钮。

        public Form1()
    {
        InitializeComponent();

        for (int i = 0; i < 5; i++)
        {
            Button button = new Button();
            button.Location = new Point(160, 30 * i + 10);
            button.Click += new EventHandler(ButtonClickCommonEvent);
            button.Tag = i;
            this.Controls.Add(button);
        }
    }

void ButtonClickCommonEvent(object sender, EventArgs e)
  {
     Button button = sender as Button;
     if (button != null)
     {       
        switch ((int)button.Tag)
        {
           case 0:
              // First Button Clicked
              break;
           case 1:
              // Second Button Clicked
              break;
           // ...
        }
     }
  }

请提供代码解决方案。

【问题讨论】:

  • 您可以简单地使用TableLayoutPanel
  • 是的,我可以,但根据某些条件,按钮的数量可能是 4 或 40 或 50。在这种情况下,我该如何使用 TableLayoutPanel??

标签: c# .net winforms button


【解决方案1】:

您可以使用TableLayoutPanel 并动态创建按钮并将它们添加到面板中。

例如:

private void Form1_Load(object sender, EventArgs e)
{
    var rowCount = 3;
    var columnCount = 4;

    this.tableLayoutPanel1.ColumnCount = columnCount;
    this.tableLayoutPanel1.RowCount = rowCount;

    this.tableLayoutPanel1.ColumnStyles.Clear();
    this.tableLayoutPanel1.RowStyles.Clear();

    for (int i = 0; i < columnCount; i++)
    {
        this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100 / columnCount));
    }
    for (int i = 0; i < rowCount; i++)
    {
        this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100 / rowCount));
    }

    for (int i = 0; i < rowCount* columnCount; i++)
    {
        var b = new Button();
        b.Text = (i+1).ToString();
        b.Name = string.Format("b_{0}", i + 1);
        b.Click += b_Click;
        b.Dock = DockStyle.Fill;
        this.tableLayoutPanel1.Controls.Add(b);
    }
}

void b_Click(object sender, EventArgs e)
{
    var b = sender as Button;
    if (b != null)
        MessageBox.Show(string.Format("{0} Clicked", b.Text));
}

注意:

【讨论】:

  • 哇!感谢 Reza 提供的精彩代码。我认为这样的事情不可能在 win 表单中设计,只能使用 spans 和 div 在 web 表单中完成。
猜你喜欢
  • 1970-01-01
  • 2017-05-24
  • 1970-01-01
  • 2021-02-13
  • 2020-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多