【问题标题】:c# dynamically removing selected labels from formc# 从表单中动态删除选定的标签
【发布时间】:2014-12-01 06:40:54
【问题描述】:

首先。我已经动态添加了标签。我想在 button_Click 之后动态删除此标签,但我在 MainForm 上有很多标签,我只想删除调用 labelWorker 的标签。 我尝试了这样的事情(示例):

List<Control> controlsToRemove = new List<Control>();

foreach (Control ctrl in this.Controls)
{
    if (ctrl is Label)
    {
        controlsToRemove.Add(ctrl);
    }
}

foreach (Control ctrl in controlsToRemove)
{
    this.Controls.Remove(ctrl);
}

但这是为了删除 WinForm 中的所有标签。仅如何删除:

Label labelWorker = new Label();

在我再次创建它们之前(没有重复/重叠)。

【问题讨论】:

  • 您缺少标签的名称。一旦您分配了该名称或 ID,它应该可以工作
  • 我在下面写了这个,但我会在这里再次写:当我使用这个代码时,只有第一个创建的标签被删除。

标签: c# controls labels


【解决方案1】:

你应该给你的标签起个名字

Label labelWorker = new Label();
labelWorker.Name = "labelWorker";

然后您可以通过它的名称轻松访问它并删除它

var labelToRemove = this.Controls["labelWorker"];
this.Controls.Remove(labelToRemove);

当然,您可以使用多个标签。只要确保它们有一些不常见的东西(例如名称中的前缀),以便您可以区分它们。

【讨论】:

  • 当我使用这个代码时,只有第一个创建的标签被删除。
  • foreach (Control ctrl in this.Controls.OfType&lt;Label&gt;().Where(x =&gt; x.Name == "labelWorker")) { this.Controls.Remove(ctrl); }
【解决方案2】:

当你创建 labelWorker 时,给它一个 Tag 值来识别它们。那么:

if (ctrl is Label && ((Label)ctrl).Tag.ToString() == "somevalue") controlsToRemove.Add(ctrl);

【讨论】:

  • 我正在尝试以某种方式添加此代码,但这对我来说很困难 :( 如果您可以编写更多代码,那就太好了。编辑:好的,我现在明白了
  • 这对我有用。谢谢。出于好奇,我有警告:可能意外的参考比较;要进行值比较,请将左侧类型转换为“字符串”,这是什么意思?
  • @Kafus。 tag 属性是一个对象转换为字符串以使其快乐
【解决方案3】:
var dynamicLabels = this.Controls.OfType<Label>().Where(c => c.Tag != null && c.Tag.ToString() == "Dynamic").ToList();
foreach(var lbl in dynamicLabels)
    this.Controls.Remove(lbl);            

【讨论】:

    猜你喜欢
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 2019-09-29
    相关资源
    最近更新 更多