2016-04-21 32 views
1

Ich habe eine Taste, die beim Drücken erzeugt eine Textbox. Der Benutzer schreibt etwas in das Textfeld, und wenn er die Eingabetaste drückt, muss der Text an derselben Stelle durch ein Etikett angezeigt werden.So senden und abrufen Sie Text aus dynamischem Textfeld, wenn die Eingabetaste in Windows-Formularen mit C# gedrückt wird?

Ich bin in der Lage, die dynamische Textbox zu erstellen, und ich denke, ich weiß, wie Sie den Text einer Beschriftung zuweisen und anzeigen, vorausgesetzt, ich bekomme den Text.

Die meisten Tutorials im Internet sprechen über die Verwendung der Übergabeschaltfläche und das Erstellen eines AcceptButton als Standardschaltfläche und das anschließende Verknüpfen der beiden. Aber hier habe ich keinen Submit-Button per se. Und ich war nicht in der Lage, herauszufinden, wie man den Keypress-Event-Handler schreibt und wo er geschrieben wird, da die Textboxen bereits in einem Event-Handler sind.

Bitte helfen.

Hier ist was ich mir vorstellen konnte.

int CMonSub; 
private void btnMonSub_Click(object sender, EventArgs e) 
{ 
    TextBox txtMonSub = new TextBox(); 
    txtMonSub.Name = "MonSub" + CMonSub; 
    txtMonSub.Location = new System.Drawing.Point(155 + (100 * CMonSub), 60); 
    CMonSub++; 
    txtMonSub.Size = new System.Drawing.Size(100, 25); 
    this.Controls.Add(txtMonSub); 
    string s = txtMonSub.Text; 
    Label l = new Label(); 
    l.Text = s; 
    l.Location = new System.Drawing.Point(155 + (100 * CMonTime), 60); 
    l.Size = new System.Drawing.Size(100, 25); 
    this.Controls.Add(l); 
} 

Ich brauche nur diese Zeichenfolge s, wenn der Benutzer die Eingabetaste drückt.

Und vielleicht ist auch der Teil, wo ich den Text zu einem Label zuweisen, auch nicht der richtige Weg. Hilfe dabei ist auch erwünscht.

Vielen Dank im Voraus.

Antwort

0

Wenn Sie mehrere Textfelder und Beschriftungen haben, müssen Sie die Paare im Auge behalten, damit Sie wissen, mit wem Sie es zu tun haben. Ein Wörterbuch ist der einfachste Weg, dies zu tun.

Sie können das KeyPress-Ereignis verwenden, um zu sehen, wann der Benutzer auf eine Taste klickt, und um etwas zu tun, wenn diese Taste gedrückt wird. Hier

ist einige Beispiel-Code:

Dictionary<TextBox, Label> textBoxLabelPairing = new Dictionary<TextBox, Label>(); 

    private void btnMonSub_Click(object sender, EventArgs e) 
    { 
     TextBox txtMonSub = new TextBox(); 
     txtMonSub.Name = "MonSub" + CMonSub; 
     txtMonSub.Location = new System.Drawing.Point(155 + (100 * CMonSub), 60); 
     CMonSub++; 
     txtMonSub.Size = new System.Drawing.Size(100, 25); 

     //ADDED: keypress event 
     txtMonSub.KeyPress += txtMonSub_KeyPress; 

     this.Controls.Add(txtMonSub); 
     string s = txtMonSub.Text; 
     Label l = new Label(); 
     l.Text = s; 
     l.Location = new System.Drawing.Point(155 + (100), 60); 
     l.Size = new System.Drawing.Size(100, 25); 
     this.Controls.Add(l); 

     //ADDED: Dictionary Pairing 
     textBoxLabelPairing.Add(txtMonSub, l); 
    } 

    void txtMonSub_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     //if enter key is pressed 
     if (e.KeyChar == (char)13) 
     { 
      TextBox thisTextBox = (TextBox)sender; 
      Label associatedLabel = textBoxLabelPairing[thisTextBox]; 
      associatedLabel.Text = thisTextBox.Text; 
     } 
    } 

Dieser Code wird ein Ereignis für jede neue Textbox machen Sie machen. Das einzige Problem ist, dass es immer dieselbe Methode auslöst (txtMonSub_KeyPress). Um dies zu verhindern, müssen Sie den Absender des Ereignisses verwenden (wie im Code gezeigt), damit Sie wissen, welche Textbox gerade aktualisiert wurde. Von dort können Sie Ihr Dictionary-Objekt verwenden, um zu sehen, welches Label aktualisiert werden muss (da wir sie in der vorherigen Methode gepaart haben).

Update:

Wenn Sie wirklich die Textbox entsorgen wollen, können Sie es wie folgt tun:

void txtMonSub_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     //if enter key is pressed 
     if (e.KeyChar == (char)13) 
     { 
      TextBox thisTextBox = (TextBox)sender; 
      string textBoxText = thisTextBox.Text; 
      Label associatedLabel = textBoxLabelPairing[thisTextBox]; 
      associatedLabel.Text = textBoxText; 
      this.Controls.Remove(thisTextBox); 
      thisTextBox.Dispose(); 
     } 
    } 
+0

ist der Teil, wo ich den Text auf einem Etikett bin zuweisen und es Anzeigen auf der gleichen Position richtig? Weil nach dem Hinzufügen, was Sie hinzugefügt haben, die Eingabetaste die Beschriftungen nicht anzeigt. –

+0

Ich habe den Code getestet, den ich Ihnen gesendet habe, und das Etikett wurde korrekt aktualisiert. Ich bin mir nicht sicher über die Positionierung auf Ihrem Formular. – oppassum

+0

In der Tat ging es um die Positionierung. Das Textfeld maskierte das Etikett, das erstellt wurde. Vielen Dank. –