【问题标题】:How to remove form control in c#?如何在c#中删除表单控件?
【发布时间】:2016-05-03 07:36:48
【问题描述】:
TextBox txt1 = new TextBox();
TextBox txt2 = new TextBox();

if (Cat0.Text == "test")
{
    txt1.Name = "testText";
    txt1.Width = 170;
    txt1.Height = 21;
    txt1.Location = new System.Drawing.Point(122, 145);

    txt2.Name = "testText2";
    txt2.Width = 170;
    txt2.Height = 21;
    txt2.Location = new System.Drawing.Point(122, 171);

    panel1.Controls.Add(txt1);
    panel1.Controls.Add(txt2);
}
else
{
    if (panel1.Controls.Contains(txt1)) // not working
    {
        panel1.Controls.Remove(txt1);
    }
}

if else 语句不起作用。所以我不能删除这个块中的表单控件。我认为不工作的原因是因为使用代码创建的txt1 控件。

【问题讨论】:

  • 你说的不工作是什么意思?从显示的代码来看,它永远不会进入if,因为在周围的else中,控件永远不会添加到panel1
  • 只需为文本框创建一个成员并检查该成员。您创建了一个与之前添加的文本框不同的文本框的全新实例。

标签: c# forms controls


【解决方案1】:

试试这个

TextBox txt1 = new TextBox();
TextBox txt2 = new TextBox();
if (Cat0.Text == "test")
{
     txt1.Name = "testText";
     txt1.Width = 170;
     txt1.Height = 21;
     txt1.Location = new System.Drawing.Point(122, 145);
     txt2.Name = "testText2";
     txt2.Width = 170;
     txt2.Height = 21;
     txt2.Location = new System.Drawing.Point(122, 171);
     panel1.Controls.Add(txt1);
     panel1.Controls.Add(txt2);
}
else
{
     foreach (Control item in panel1.Controls)
     {
         if (item.Name == "testText")
         {
              panel1.Controls.Remove(item);
              break;
         }
     }
}

【讨论】:

  • 但是名字是txt1.Name = "testText";
  • 这解决了一个不存在的问题:没有什么可删除的,因为在所示的程序流程中,txt1 从未添加到panel1
  • @Filburt:你能读懂代码吗?两个文本框都添加到面板中。
  • @Filburt nope 猜这个函数是在按钮点击事件上调用的,然后看起来一切都很好
  • @SebastianSchulz 会读吗?它们被添加到外部if 中。 else 分支中没有添加任何内容。
【解决方案2】:

我认为这里的问题是每次输入方法时都会创建一个新的 TextBox。将您的 TextBox txt1 = new TextBox();TextBox txt2 = new TextBox(); 移到方法之外,我认为它会正常工作。

【讨论】:

    【解决方案3】:

    您总是创建一个新实例,因此您的局部变量中没有正确的实例。

    这是一种方法:

      TextBox txt1 = null;
    
      //Lookup txt1
      foreach (Control item in panel1.Controls)
      {
        if (item.Name == "testText")
        {
          txt1 = (TextBox)item;
        }
      }      
    
      TextBox txt2 = null;
      //Lookup txt2
      foreach (Control item in panel1.Controls)
      {
        if (item.Name == "testText2")
        {
          txt2 = (TextBox)item;
        }
      }
      if (Cat0.Text == "test")
      {
        if (txt1 == null)
        {
          //only if txt1 not found add it
          txt1 = new TextBox();
          txt1.Name = "testText";
          txt1.Width = 170;
          txt1.Height = 21;
          txt1.Location = new System.Drawing.Point(122, 145);
          panel1.Controls.Add(txt1);
        }
    
        if (txt2 == null)
        {
          txt2 = new TextBox();
          txt2.Name = "testText2";
          txt2.Width = 170;
          txt2.Height = 21;
          txt2.Location = new System.Drawing.Point(122, 171);
          panel1.Controls.Add(txt2);
        }
      }
      else
      {
        if (panel1.Controls.Contains(txt1))
        {
          panel1.Controls.Remove(txt1);
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多