【问题标题】:Adding UserControl dynammiclly to a panel on buttonClick将用户控件动态添加到按钮单击的面板中
【发布时间】:2015-05-14 19:59:28
【问题描述】:

在我的表单中,我有一个按钮,我想在每次单击时将用户控件添加到面板:

public partial class AddInstanceForm : MetroForm
{          
      private List<Material> material { get; set; }
      public AddInstanceForm()
      {
          InitializeComponent();
      }

      // get data from db for mycombobox which exit in MaterilControl
      private void AddInstanceForm_Load(object sender, EventArgs e)
      {
          using(DBContext db=new DBContext())
          {
              material = db.Materials.ToList();
          }
      }

      // This Attached to button click
      private void anotherMaterial_Click(object sender, EventArgs e)
      {         
          MaterialControl mc = new MaterialControl(material);
          this.SuspendLayout();

          panel1.Controls.Add(mc);     

          //EDIT
          this.Invalidate();
          this.Update();

          this.ResumeLayout(false);
      }
}

问题是面板中只添加了一个用户控件,无论按钮被点击多少次:

public partial class MaterialControl : UserControl
{
      private MaterialView _material;
      private List<Material> MaterialboData { get; set; }
      public MaterialView Material
      {
          get 
          {
              _material.Name=MaterialName.Text;
              _material.Quntity = MaterialQu.Text;
              _material.MaterialID = Convert.ToInt32(MaterialName.ValueMember);
              return _material;
          }
          set 
          {
              MaterialName.Text=value.Name;
              MaterialQu.Text = value.Quntity;
              MaterialName.ValueMember = Convert.ToString(_material.MaterialID);
          }
      }

      public MaterialControl(List<Material> Data)
      {
          _material = new MaterialView();
          this.MaterialboData = new List<Material>();
          this.MaterialboData = Data;
          InitializeComponent();
      }
}

【问题讨论】:

  • 在绘制控件后尝试调用 Invalidate()。

标签: c# winforms user-controls


【解决方案1】:

如果您有一个专门用于这些控件的面板,您可以使用 Dock Top 代替,而不是将它们添加到新的顶部位置,这将使面板自动为您布局控件。

【讨论】:

  • 另外,panel1的设置是什么?面板一是否可能只是第一个项目的大小,而其他项目都只是添加到面板 1 的可视区域之外?尝试在循环中添加一个 panel1.Height += 10。
  • 当你在调试器中单步调试时,Z 顺序是不是每个都不同?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-25
  • 2023-03-31
  • 1970-01-01
  • 2012-07-22
  • 1970-01-01
  • 2016-10-14
  • 2017-11-08
相关资源
最近更新 更多