Windows Forms: TextBox mit Enter verlassen
-
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...
-
@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).
-
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 denKeyPress
Event derTextBox
draufhängen. Das sollte im Prinzip gleich gehen wie auch derAnzahl_Spieler_OK_Button_Click
Handler verbunden wird, bloss dass der "event args" Parameter vom TypSystem::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 ausAnzahl_Spieler_OK_Button_Click
als auch aus dem neuenKeyPress
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 Parametere
.
Und dann muß es in C++/CLIe->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!