Windows Forms: TextBox mit Enter verlassen



  • Hallo,
    Ich arbeite mich gerade in Forms ein. In einer Form habe ich eine TextBox (zur Eingabe) und ein Button zur Bestätigung. Meine Frage: Wie kann ich machen, dass man nach der Eingabe nur "Enter" drücken muss, um das Click-Event des Buttons auszuführen? Vielen Dank im Vorraus! 😅



  • Bist du sicher dass du mit C++/CLI und arbeitest?
    Ich würde eher annehmen C++ mit MFC oder C# mit WinForms.


  • Mod

    Ich habe es nach C++/CLI verschoben, weil der Beitrag in C++ erstellt wurde, wo es auf jeden Fall falsch war. Ich war mir aus den paar Stichworten nicht sicher, was das genau ist. WinForms ist doch gerade nicht MFC, oder?



  • Ich arbeite mit C++ und WinForms. Bin mir nicht sicher ob das MFC ist, könnte aber sein.



  • @Mau-Arn sagte in Windows Forms: TextBox mit Enter verlassen:

    Ich arbeite mit C++ und WinForms

    Wer hat dir das denn empfohlen? Lies mal Windows Forms und Visual C++ MACHT KEINEN SINN!

    C++/CLI (also C++ mit .NET) ist nicht für UI-Entwicklung gedacht - sondern nur für Interop-Projekte.
    Nimm entweder C# oder aber natives C++ mit einem dazu passenden UI-Framework (z.B. Qt). MFC ist zwar auch ein UI-Framework, aber design-technisch [für aktuelles C++14/17/20] nicht mehr zu empfehlen.

    @SeppJ: Dieser Thread ist aber im MFC-Forum gelandet...


  • Mod

    @Th69 sagte in Windows Forms: TextBox mit Enter verlassen:

    @SeppJ: Dieser Thread ist aber im MFC-Forum gelandet...

    Ja nu! Der Threadersteller weiß nicht, was er nutzt, wie soll ich es dann wissen? hustbaer eine beschwert sich, wenn ich es nach C++/CLI schiebe, Th69 beschwert sich, wenn ich es dann nach MFC schiebe. Ich könnte noch C# versuchen…



  • @Th69
    Ich bin Schüler eines technischen Gymnasiums. Dort programmieren wir C++, und haben jetzt mit Winforms mit C++ angefangen. Inwiefern das Sinn macht weiß ich nicht. Beantwortet aber auch leider nicht meine Frage...



  • @Mau-Arn
    Zeig mal ein Stück GUI Code. Daraus sollte man schliessen können was es nun wirklich ist. C++ mit WinForms wäre nämlich wirklich total bekloppt.



  • @SeppJ: Das war keine Beschwerde, sondern nur bezogen auf

    Ich habe es nach C++/CLI verschoben, weil der Beitrag in C++ erstellt wurde, wo es auf jeden Fall falsch war.

    Ich wußte nicht, daß du es danach noch mal verschoben hattest (ich dachte, du hättest es fälschlicherweise nach MFC verschoben).

    Und @Mau-Arn hat es ja jetzt mit

    Ich arbeite mit C++ und WinForms.

    bestätigt (also C++/CLI).



  • @hustbaer

    private: System::Void Anzahl_Spieler_OK_Button_Click(System::Object^  sender, System::EventArgs^  e) {
    				 if (String::IsNullOrWhiteSpace(Anzahl_Spieler_Box->Text)){
    				 }
    				 else{
    					 String^ Anzahl_Spieler = Anzahl_Spieler_Box->Text;
    					 
    					 int iEingabelaenge = Anzahl_Spieler->Length;
    					 char cSpieler_Anzahl[10];
    					 
    					 for (int i = 0; i < iEingabelaenge; i++) cSpieler_Anzahl[i] = Convert::ToChar(Anzahl_Spieler[i]);
    					 
    					 if (iEingabelaenge > 1){
    						 MessageBox::Show("Eingabe zu lang!", "Monopoly-Spielbegleiter", MessageBoxButtons::OK, MessageBoxIcon::Error, MessageBoxDefaultButton::Button1);
    						 Anzahl_Spieler = "";
    						 Anzahl_Spieler_Box->Text = Anzahl_Spieler;
    						 Anzahl_Spieler_Box->Focus();
    					 }
    					 else{
    						 if (cSpieler_Anzahl[0] > 52 || cSpieler_Anzahl[0] < 50){
    							 MessageBox::Show("Unzulässige Eingabe!", "Monopoly-Spielbegleiter", MessageBoxButtons::OK, MessageBoxIcon::Error, MessageBoxDefaultButton::Button1);
    							 Anzahl_Spieler = "";
    							 Anzahl_Spieler_Box->Text = Anzahl_Spieler;
    							 Anzahl_Spieler_Box->Focus();
    						 }
    						 else{
    							 MessageBox::Show("Drücke \"OK\" wenn ihr bereit seid. Dann geht's los!", "Monopoly-Spielbegleiter", MessageBoxButtons::OK, MessageBoxIcon::Information, MessageBoxDefaultButton::Button1);
    						 }
    					 }
    
    				 }
    	}
    
    

    Ich hoffe es ist nicht zu unübersichtlich😅



  • @Mau-Arn sagte in Windows Forms: TextBox mit Enter verlassen:

    @Th69
    Ich bin Schüler eines technischen Gymnasiums. Dort programmieren wir C++, und haben jetzt mit Winforms mit C++ angefangen. Inwiefern das Sinn macht weiß ich nicht.

    Dann sage deinem Lehrer, daß das kompletter Unsinn ist (und zeige ihm obigen Artikel)!
    Das aktuelle Visual Studio 2019 bietet doch auch keine WinForms-Vorlagen für C++ mehr an. Welche IDE verwendet ihr denn?

    Und daher werde ich dir auch nicht bei der Aufgabe helfen...

    PS: Code hier im Forum solltest du mit Code-Tags versehen ("</>"-Button neben der ComboBox für die Sprachauswahl).
    Kannst auch noch nachträglich deinen Beitrag editieren (mittels des Drei-Punkte-Menüs: Bearbeiten).



  • @Th69
    Wir verwenden VS 2013. Danke für deinen Nutzvollen Beitrag!😆



  • OK, das ist tatsächlich C++/CLI mit WinForms 🤦🏻♂
    Na gut, wenigstens ist jetzt klar dass es wirklich und wahrhaftig um C++/CLI mit WinForms geht.

    @Mau-Arn
    Du musst dich auf den KeyPress Event der TextBox draufhängen. Das sollte im Prinzip gleich gehen wie auch der Anzahl_Spieler_OK_Button_Click Handler verbunden wird, bloss dass der "event args" Parameter vom Typ System::Windows::Forms::KeyPressEventArgs ist.
    Da drin prüfst du dann ob es die Entertaste war (e.KeyChar == Keys.Return), und wenn ja, machst du das selbe was auch gemacht wird wenn der OK Button gedrückt wurde.

    Sinnvollerweise solltest du dazu den Inhalt der Anzahl_Spieler_OK_Button_Click Funktion in eine Hilfsfunktion verlagern, die du dann sowohl aus Anzahl_Spieler_OK_Button_Click als auch aus dem neuen KeyPress Event-Handler aufrufen kannst. Sonst müsstest du das ja alles doppelt schreiben (und dann auch doppelt ändern wenn's mal was zu ändern gibt).



  • @hustbaer
    Ich habe jetzt folgendes eingefügt:

    private: System::Void Anzahl_Spieler_Box_KeyPress(System::Object^  sender, System::Windows::Forms::KeyPressEventArgs  e) {
    
                                                                        if (e.KeyChar == Keys.Return){
    
                                                                                      Anzahl_Spieler();
    
                                                                        }
    
                               }
    

    Leider wird mir da "Keys.Return" als Fehler angezeigt. "Typname ist nicht zulässig".



  • Ich geb dir doch mal einen besseren Tipp: Form.AcceptButton



  • @Mau-Arn sagte in Windows Forms: TextBox mit Enter verlassen:

    Keys.Return

    Probier's mit Keys::Return.



  • @hustbaer
    Danke für den Tipp!
    Keys::Return funktioniert, jetzt wird jedoch das e in "e.KeyChar" als Fehler markiert: "ein auf eine bereichsbezogene Enumerarion angewendeter integrierter Binäroperator erfordert zwei Operanden desselben Typs".

    Sorry das ich gerade nicht so klar komme. Kenne mich mit dem ganzen WinForms noch nicht so gut aus.



  • Da fehlt ein ^ vor dem letzten Parameter e.
    Und dann muß es in C++/CLI e->KeyChar lauten.

    Du kennst dich leider weder mit C++(/CLI) noch mit WinForms aus und ich prophezeie, daß ihr auch nicht weit damit kommt.



  • @Th69
    Da kommt genau der gleiche Fehler...
    Trotzdem Danke für die Idee.



  • Jetzt funktionierts. Ich hatte einen kleinen Fehler drin. Danke für die Hilfe! 😁


Log in to reply