2016-05-03 3 views
-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 
{ 
    if (panel1.Controls.Contains(txt1)) // not working 
    { 
     panel1.Controls.Remove(txt1); 
    } 
} 

Die if else Anweisung funktioniert nicht. Daher kann ich die Formularsteuerung in diesem Block nicht entfernen. Ich denke, der Grund dafür, nicht zu arbeiten, ist wegen der txt1 Steuerung mit Code erstellt.Wie Formularsteuerung in C# entfernen?

+3

Was meinst du mit * nicht funktioniert *? Aus dem gezeigten Code wird niemals das 'if' eingegeben, da in der umgebenden' else' das Steuerelement nie zu 'panel1' hinzugefügt wird. – Filburt

+0

Erstellen Sie einfach ein Mitglied für das Textfeld und suchen Sie nach dem Mitglied. Sie erstellen eine vollständig neue Instanz einer Textbox, die nicht dem zuvor hinzugefügten Textfeld entspricht. –

Antwort

0

versuchen diese

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; 
     } 
    } 
} 
+0

Aber der Name ist 'txt1.Name =" testText ";' –

+0

yaa ich gerade bemerkt, und bearbeitet meinen Code –

+1

Dies löst ein nicht existierendes Problem: Es gibt nichts zu entfernen, weil 'txt1' nie' panel1' hinzugefügt wird der Programmablauf gezeigt. – Filburt

0

Ich denke, das Problem hier ist, dass Sie eine neue TextBox jedes Mal, wenn Sie die Methode erstellen eingeben. Verschieben Sie Ihre TextBox txt1 = new TextBox(); und TextBox txt2 = new TextBox(); außerhalb der Methode und ich denke, es wird gut funktionieren.

0

Sie erstellen immer eine neue Instanz, sodass Sie nicht die richtige Instanz in Ihrer lokalen Variablen haben.

Hier ist eine Art und Weise zu tun:

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); 
    } 
    } 
} 
Verwandte Themen