如何将按钮的单击事件创建的控件的对象调用到另一个按钮的单击通风口?

时间:2013-04-29 13:50:17

标签: .net winforms c#-4.0

我在运行时在按钮的点击事件上添加了一个面板,即每次我们点击按钮时,面板都会被调用。

Panel p = new Panel();
p.Location = new Point(10, (childrenCount - 1) * 280);
p.Width = 800;
p.Height = 250;
/****some code****/
this.Controls.Add(p);

现在我在表单上删除了一个新按钮,我希望在表单的click事件中删除该面板。那么如何在此按钮的单击事件上调用此面板类的对象p。

如何在运行时向面板添加背景 这是我要添加背景的面板

public void addchildbtn_Click_1(object sender, EventArgs e)
       { //Adds a child
           try
           {
               rmvchildclicklbl.Enabled = true;
               remvchildbtn.Enabled = true;
               no_childnumlbl.Text = (childrenCount).ToString();
               childclmns clmn = new childclmns();
               clmn.Location = new Point(100, 200);
               clmn.Name = "column" ;
               this.Controls.Add(clmn);
               childrenCount++;
               Panel p = new Panel();
               p.Location = new Point(10, (childrenCount - 1) * 280);
               p.Width = 800;
               p.Height = 250;
               p.BorderStyle = BorderStyle.Fixed3D;
               p.ForeColor = Color.Black;
               p.BackColor = Color.WhiteSmoke;
               p.BackgroundImage = new Bitmap(@"image\baby.bmp");
               p.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
               // p.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage")));
               Label lblchild = new Label();
               lblchild.BorderStyle = BorderStyle.Fixed3D;
               lblchild.Location = new Point(20, 50);
               lblchild.Size = new System.Drawing.Size(50, 20);
               lblchild.Text = "Child  " + (childrenCount - 1);
               TextBox tName = new TextBox(); //TextBox for the name
               tName.BorderStyle = BorderStyle.Fixed3D;
               tName.Location = new Point(120, 50);
               tName.Size = new System.Drawing.Size(135, 60);
               tName.Text = "";
               MonthCalendar calendar = new MonthCalendar(); //Calendar to choose the birth date
               calendar.Location = new Point(310, 40);
               ComboBox bloodGroup = new ComboBox(); //ComboBox for the blood group
               bloodGroup.Location = new Point(650, 50);
               bloodGroup.Size = new System.Drawing.Size(135, 60);
               for (Enum.Blood_Group l = Enum.Blood_Group.O_negative; l <= Enum.Blood_Group.AB_positive; l++)
               {
                   bloodGroup.Items.Add(l);
               }
               p.Controls.Add(lblchild);
               p.Controls.Add(tName);
               p.Controls.Add(calendar);
               p.Controls.Add(bloodGroup);
               this.Controls.Add(p);
               p.Name = "panel" + childrenCount;
               panels.Add(p);
               //Summit button location
               button1.Visible = true;
               int j=350, k= 300;
               k = k + ((childrenCount - 1) * 280);
               button1.Location = new Point(j, k);
               btnht= k.ToString();
           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message);
           }

       }

1 个答案:

答案 0 :(得分:1)

您需要引用要删除的面板。

有很多方法可以做到。

您可以向后搜索Controls集合并删除最后添加的面板,或者例如,将添加的面板存储在某个位置的列表中,以便将其删除:

// in the form class
List<Panel> panels = new List<Panel>();

// in your add button click event
/****some code****/
panels.Add(p);
this.Controls.Add(p);

// in your remove button click event
if (panels.Any())
{
    var panel = panels.Last();
    this.Controls.Remove(panel)
    panels.Remove(panel);
}

或者,或者:

// in your add button click event
Panel p = new Panel();
p.Location = new Point(10, (childrenCount - 1) * 280);
p.Width = 800;
p.Height = 250;
p.Name = "panel" + childrenCount;
/****some code****/
this.Controls.Add(p);


// in your remove button click event
this.Controls.RemoveByKey("panel" + childrenCount);
childrenCount--;