如何使用动态数量的按钮创建Windows窗体对话框?

时间:2012-11-27 10:07:51

标签: c# winforms

我需要创建一个对话框或类似弹出屏幕的东西。我有这个项目数组,然后我需要在对话框中为每个项目创建一个按钮,以便我可以通过单击按钮进行导航。

在C#中最好的方法是什么?请有人指导我这个

3 个答案:

答案 0 :(得分:3)

如果您使用的是,请在表单上放置FlowLayoutPanel。然后在运行时将所有控件添加到它。

foreach(var item in items)
{
   Button button = new Button();
   // setup button properties
   // subscribe to events
   flowLayoutPanel.Controls.Add(button);
}

FlowLayoutPanel会自动安排您的控件。

答案 1 :(得分:0)

考虑到Dialog或类似的父元素称为sp,ar是要用于创建按钮的元素数组:

for(YourObject obj : ar)
{
  System.Windows.Controls.Button newBtn = new Button();
  newBtn.Content = obj.YourProperty;
  newBtn.Name = "Button" + obj.YourProperty;
  sp.Children.Add(newBtn);
}

答案 2 :(得分:0)

我正在玩一些概念,而一部分似乎就是创建动态对话框的典范。您可以向其添加动态按钮创建,组合并使用表格或流程布局面板正确格式化

DialogResult result;
using (var popup = new Form())
{
    popup.Size = new Size(1000, 500);
    popup.Location = new Point(Convert.ToInt32(this.Parent.Width / 2) - 500, Convert.ToInt32(this.Parent.Height / 2) - 250);
    popup.FormBorderStyle = FormBorderStyle.FixedDialog;
    popup.MinimizeBox = false;
    popup.MaximizeBox = false;
    popup.Text = "My title";
    var lbl = new Label() { Dock = DockStyle.Top, Padding = new Padding(3), Height = 30 };
    lbl.Font = new Font("Microsoft Sans Serif", 11f);
    lbl.Text = "Do you want to Continue?";

    // HERE you will add your dynamic button creation instead of  my hardcoded

    var btnYes = new Button { Text = "Yes", Location = new Point(700, 400) };
    btnYes.Click += (s, ea) => { ((Form)((Control)s).Parent).DialogResult = DialogResult.Yes; ((Form)((Control)s).Parent).Close(); };
    var btnNo = new Button { Text = "No", Location = new Point(900, 400) };
    btnNo.Click += (s, ea) => { ((Form)((Control)s).Parent).DialogResult = DialogResult.No; ((Form)((Control)s).Parent).Close(); };

    popup.Controls.AddRange(new Control[] { lbl, btnYes, btnNo });
    result = popup.ShowDialog(this);

}
if (result == DialogResult.Yes)
{
    // do this
}
else
{
   // do that
}

这是如何使用对话框结果输出创建动态对话框的示例。