在c#中如何删除动态生成的控件?? 10

PictureBoxpic;Labellabel1,label2;foreach(stringkeyingm.Game.CurrentLevel.Monsters.Key... PictureBox pic;
Label label1, label2;
foreach (string key in gm.Game.CurrentLevel.Monsters.Keys)
{
UIContainer monsterContainer = new UIContainer();

pic = new PictureBox();
//背景色为透明
pic.BackColor = Color.Transparent;
pic.SizeMode = PictureBoxSizeMode.AutoSize;
//初始位置是怪物对象的初始位置
pic.Location = gm.Game.CurrentLevel.Monsters[key].OriginalLocation;
//怪物图片
pic.Image = gm.Game.CurrentLevel.Monsters[key].Image;
//右键指定
pic.ContextMenuStrip = this.cmsAttack;
//保存怪物key
pic.Tag = key;
//描绘到窗体
this.Controls.Add(pic);
//保存一个容器对象
monsterContainer.Pic = pic;

label1 = new Label();
//显示原始生命值长度
label1.Size = new Size(gm.Game.CurrentLevel.Monsters[key].OriginalBlood, 20);
label1.AutoSize = false;
label1.BackColor = Color.Red;
label1.BorderStyle = BorderStyle.FixedSingle;
//位置在PictureBox上方
label1.Location = new Point(
gm.Game.CurrentLevel.Monsters[key].OriginalLocation.X,
gm.Game.CurrentLevel.Monsters[key].OriginalLocation.Y - 25
);
this.Controls.Add(label1);
monsterContainer.LabelBlood = label1;

label2 = new Label();
//显示当前生命值
label2.Size = new Size(gm.Game.CurrentLevel.Monsters[key].CurrentBlood, 20);
label2.AutoSize = false;
label2.BackColor = Color.Yellow;
label2.BorderStyle = BorderStyle.FixedSingle;
label2.Location = new Point(
gm.Game.CurrentLevel.Monsters[key].OriginalLocation.X,
gm.Game.CurrentLevel.Monsters[key].OriginalLocation.Y - 25);
this.Controls.Add(label2);
monsterContainer.LabelHurt = label2;
//放在最顶层
label2.BringToFront();

UIMappings.Add(key, monsterContainer);
}
展开
 我来答
奇芷荷中复
2019-05-28 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:29%
帮助的人:892万
展开全部
用control的remove方法,前提条件你要找到他的某一特征,不管是名字还是id还是上面显示的文本,确保你要查到他。
我打个比方他在form1的panel1里面,我不知道他叫什么名字,但是知道他上面显示的是“加载”,现在我要移除他:
foreach(control ctl in this.panel1.controls) //遍历panel1中所有控件
{
if(ctl is button)//挑选出是按钮类型的
{
if(ctl.text=="加载") //挑选出上面显示是“加载”的按钮
{
this.panel1.controls.remove(ctl); //移除他
}
}
}
百度网友eefa003a9
2009-02-22 · 超过23用户采纳过TA的回答
知道答主
回答量:66
采纳率:0%
帮助的人:0
展开全部
首先你要在代码外面保存你new过的所有控件 比如保存在一个List<Control> ctrls中

删除的时候这么写
foreach(Control i in ctrls)
{
this.Control.Remove(i);
i.Dispose();
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dong_1984dd
推荐于2016-04-17 · TA获得超过1.1万个赞
知道小有建树答主
回答量:1070
采纳率:100%
帮助的人:228万
展开全部
  1. 单击button1在panel上动态新建了多个label,现在想要点击选择某个动态新建的label,按button2,可以把这个label删掉
    在button1_Click事件中,创建label,代码:

  2. Label lb1 = new Label();
     lb1.Name = "panel"+j;
     lb1.BackColor = Color.Transparent;
     lb1.BorderStyle = BorderStyle.FixedSingle;
     Panel1.Controls.Add(lb1);

  3. 为这些label增加Click事件

  4.     Label lb1 = new Label();
      lb1.Name = "panel"+j;
      lb1.BackColor = Color.Transparent;
     lb1.Click += new EventHandler(label_Click);
      lb1.BorderStyle = BorderStyle.FixedSingle;
    Panel1.Controls.Add(lb1);
    string name = "";
    private void label_Click(object sender, EventArgs e)
    {
        Label lbl = sender as Label;
        name = lbl.Name;
    }

  5. 然后在Button2的Click中:


private void button2_Click(object sender, EventArgs e)
{
    Label lbl = Panel1.Controls[name];
    if(lbl != null)
        Panel1.Controls.Remove(lbl);
}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6809e30a0
2009-02-22 · TA获得超过5285个赞
知道大有可为答主
回答量:3765
采纳率:0%
帮助的人:2814万
展开全部
this.Control.Remove(控件的对象);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式