2011-01-12 1 views
4

Ich bin eine Anwendung erstellen, wo ein Benutzer Noten eingeben und das Programm wird den gewichteten Durchschnitt ausgeben. Beim Laden wird nach der Anzahl der Kategorien für die Zuordnungen gefragt. Das Programm wird dann dynamisch Textfelder erstellen, damit der Benutzer Informationen eingeben kann. Das Problem ist, dass ich nicht herausfinden kann, wie der Text gelesen wird, der eingegeben wird, nachdem ich die Textfelder erstellt habe. Hier ist mein Code:Mit dynamisch erstellten Steuerelementen in C#

  TextBox txtbx = new TextBox(); 
      txtbx.Text = ""; 
      txtbx.Name = "txtbx1"; 
      txtbx.Location = new Point(10, 10); 
      txtbx.Height = 20; 
      txtbx.Width = 50; 
      Controls.Add(txtbx); 

Wie kann ich diesen Code ändern, so kann ich den aktuellen Text in dem Feld finden, wenn der Benutzer sendet?

Antwort

11

Wenn Sie dynamisch Steuerelemente generieren, dann werden Sie natürlich kein Feld für jedes Feld haben können. Wenn Sie jedoch versuchen, auf die Controls-Auflistung für ein benanntes Steuerelement zuzugreifen, kann ControlCollection nach Name indiziert werden. Nach der Zugabe von Namen in das Textfeld mit dem angegebenen, können Sie einfach tun:

TextBox txtbx = (TextBox)Controls["txtbx1"]; 
0

Alles, was Sie tun müssen, ist ein OnClick Zuhörer für Ihre Submit-Button einrichten und haben es etwas tun wie dieses

private void OnSubmit(object sender, EventArgs args) 
{ 
    string yourText = txtbx.Text; 
} 

Sie werden einen Verweis auf das Textfeld zu halten, nachdem Sie es erstellen. yourText enthält den Wert, den Sie benötigen. Hoffe, das hilft

+0

Wie könnte ich den Verweis auf die Textbox erstellen? –

+0

Sie könnten "txtbx" außerhalb des Gültigkeitsbereichs der Funktion angeben, wo sie von der "OnSubmit" -Funktion gesehen werden kann, oder wie Uwe Keim erwähnte, können Sie FindControl mit dem Namen verwenden, auf den Sie es setzen ("txtbx1"). – rchanley

4

Sie könnten die FindControl Methode der Page Klasse verwenden.

Diese Methode nimmt einen Parameter, der die TextBox ‚s ID ist, die Sie bei der Erstellung gesetzt haben:

txtbx.ID = "txtbx1"; 

Dann können Sie es auswählen:

TextBox txtbx1 = (TextBox)FindControl("txtbx1"); 

und verwenden.


Edit: Da die anfängliche Frage fügte hinzu, dass er zu Windows Forms ist beziehe, meine Antwort oben ist off-topic.

In Windows Forms sollten Sie einfach eine Klassenmitgliedsvariable anstelle einer lokalen Variablen verwenden. Zum Beispiel:

public partial class MyForm 
{ 
    ... 

    private TextBox txtbx; 

    ... 

    private void createControls() 
    { 
     txtbx = new TextBox(); 
     txtbx.Text = ""; 
     txtbx.Name = "txtbx1"; 
     txtbx.Location = new Point(10, 10); 
     txtbx.Height = 20; 
     txtbx.Width = 50; 
     Controls.Add(txtbx); 
    } 

    private void someOtherFunction() 
    { 
     // Do something other with the created text box. 
     txtbx.Text = "abc"; 
    } 
} 
+0

Ich kann nicht scheinen, die Page-Klasse zu finden, funktioniert es nur mit asp.net? Ich mache eine Windows-Anwendung. –

+0

Hoppla, tut mir leid, ich habe das beobachtet. Ich habe für ASP.NET geantwortet, ich werde mich entsprechend anpassen ... –

1

Behalten Sie eine Liste der Referenzen aller Textfelder auf dem Formular. Fügen Sie der Liste den TextBox-Verweis hinzu, wenn Sie sie dynamisch erstellen.

Dann können Sie einfach alle Textfelder in der Liste durchlaufen, wenn Sie ihren Text lesen möchten.

Stellen Sie sicher, dass Sie die Textfelder gemäß den zugehörigen Kategorienamen benennen. Dann können Sie das Steuerelement auch in der Liste nach deren Namen suchen.

1

Dieser Code für die Dynamisch Textbox hinzufügen On Button

int count = 1; 
public System.Windows.Forms.TextBox AddNewTextBox() 
    { 
     System.Windows.Forms.TextBox txt = new System.Windows.Forms.TextBox(); 
     this.Controls.Add(txt); 
     txt.Top = count * 25; 
     txt.Left = 100; 
     txt.Text = "TextBox " + this.count.ToString(); 
     count = count + 1; 
     return txt; 
    } 
private void Onbutton_Click(object sender, EventArgs e) 
    { 
     //Call the method AddNewTextBox that uses for Dynamically create Textbox 
     AddNewTextBox(); 
    } 

Klicken Sie hoffe, dass ich diesen Code wird Ihnen helfen. Danke Happy Coding :)