Ich benutze, System.Windows.Forms
aber seltsamerweise habe ich nicht die Fähigkeit, sie zu erstellen.
Wie kann ich so etwas wie einen Javascript-Eingabeaufforderungsdialog ohne Javascript erhalten?
MessageBox ist nett, aber es gibt keine Möglichkeit für den Benutzer, eine Eingabe einzugeben.
Ich möchte, dass der Benutzer jede mögliche Texteingabe eingibt.
Antworten:
Sie müssen einen eigenen Eingabeaufforderungsdialog erstellen. Sie könnten vielleicht eine Klasse dafür erstellen.
Und nenne es:
Update :
Standardschaltfläche ( Eingabetaste ) und anfänglicher Fokus basierend auf Kommentaren und einer anderen Frage hinzugefügt .
quelle
Fügen Sie einen Verweis auf
Microsoft.VisualBasic
Ihren C # -Code hinzu und verwenden Sie diesen:So fügen Sie die Referenz hinzu: Klicken Sie mit der rechten Maustaste auf die Verweise in Ihrem Projekt-Explorer-Fenster und dann auf Verweis hinzufügen, und aktivieren Sie VisualBasic in dieser Liste.
quelle
Interaction
existiert nicht im NamespaceMicrosoft.VisualBasic
In Windows Forms gibt es so etwas nicht.
Sie müssen dafür Ihr eigenes Formular erstellen oder:
Verwenden Sie die
Microsoft.VisualBasic
Referenz.Inputbox ist ein Legacy-Code, der aus Gründen der VB6-Kompatibilität in .Net integriert wurde. Ich rate daher, dies nicht zu tun.
quelle
Microsoft.VisualBasic.Compatibility
Namespace.Microsoft.VisualBasic
ist eher eine Reihe von Hilfsbibliotheken über .Net und überhaupt nicht wirklich VB-spezifisch.Es ist im Allgemeinen keine gute Idee, die VisualBasic-Bibliotheken in C # -Programme zu importieren (nicht, weil sie nicht funktionieren, sondern nur aus Gründen der Kompatibilität, des Stils und der Aktualisierungsfähigkeit), aber Sie können Microsoft.VisualBasic.Interaction.InputBox () aufrufen. um die Art der Box anzuzeigen, nach der Sie suchen.
Wenn Sie ein Windows.Forms-Objekt erstellen können, ist dies am besten, aber Sie sagen, dass Sie dies nicht tun können.
quelle
VisualBasic
, aber das ist nur in ihrem Kopf. Dieses Gefühl hat keine Realität. Es würde genauso gut alsMicrosoft.MakeMyLifeEasierWithAlreadyImplementedMethods
Namespace bezeichnet werden.Microsoft.VisualBasic.Compatibility
Sub-Namespace, nicht die ganze Sache. DerMicrosoft.VisualBasic
Namespace enthält viele "Kern" -Funktionen . es geht nirgendwo hin. Microsoft hat VB 6, nicht VB.NET, mit "Sonnenuntergang" gedroht. Sie haben wiederholt versprochen, dass es nirgendwo hingehen wird. Einige Leute scheinen den Unterschied immer noch nicht herausgefunden zu haben ...Andere Vorgehensweise: Angenommen, Sie haben einen TextBox-Eingabetyp, erstellen Sie ein Formular und haben den Textfeldwert als öffentliche Eigenschaft.
In der Hauptform ist dies der Code:
;;
Auf diese Weise sieht der Code sauberer aus:
quelle
Die Antwort von Bas kann Sie theoretisch in Speicherprobleme bringen, da ShowDialog nicht entsorgt wird. Ich denke, das ist ein richtigerer Weg. Erwähnen Sie auch, dass das textLabel mit längerem Text lesbar ist.
Implementierung:
quelle
prompt
zu diesem Zeitpunkt null ist. Eine einfache Lösung zu ermöglichen , der die schnelle Aufhebung ersetzenprompt.Dispose();
Innenseitepublic void Dispose()
mitif (prompt != null) { prompt.Dispose(); }
Basierend auf der Arbeit von Bas Brekelmans oben habe ich auch zwei Ableitungen erstellt -> "Eingabedialoge", mit denen Sie vom Benutzer sowohl einen Textwert als auch einen Booleschen Wert (TextBox und CheckBox) erhalten können:
... und Text zusammen mit einer Auswahl einer von mehreren Optionen (TextBox und ComboBox):
Beide erfordern die gleiche Verwendung:
Nennen Sie sie so:
Nennen Sie sie so:
quelle
Die Antwort von Bas Brekelmans ist in ihrer Einfachheit sehr elegant. Ich habe jedoch festgestellt, dass für eine tatsächliche Anwendung etwas mehr erforderlich ist, z.
Die Klasse hier behandelt diese Einschränkungen: http://www.codeproject.com/Articles/31315/Getting-User-Input-With-Dialogs-Part-1
Ich habe gerade die Quelle heruntergeladen und InputBox.cs in mein Projekt kopiert.
Überrascht, dass es nichts Besseres gibt ... Meine einzige echte Beschwerde ist, dass der Untertiteltext keine Zeilenumbrüche unterstützt, da er ein Beschriftungssteuerelement verwendet.
quelle
Leider bietet C # diese Funktion in den integrierten Bibliotheken immer noch nicht an. Die derzeit beste Lösung besteht darin, eine benutzerdefinierte Klasse mit einer Methode zu erstellen, mit der ein kleines Formular angezeigt wird. Wenn Sie in Visual Studio arbeiten, können Sie dies tun, indem Sie auf Projekt> Klasse hinzufügen klicken
Visual C # -Elemente> Code> Klasse
Benennen Sie die Klasse PopUpBox (Sie können sie später umbenennen, wenn Sie möchten ) und fügen Sie den folgenden Code ein:
Sie müssen den Namespace auf das ändern, was Sie verwenden. Die Methode gibt eine Zeichenfolge zurück. Hier ist ein Beispiel für die Implementierung in Ihrer aufrufenden Methode:
Diese Methode überprüft die zurückgegebene Zeichenfolge auf einen Textwert, eine leere Zeichenfolge oder "Abbrechen" (die Methode getUserInput gibt "Abbrechen" zurück, wenn auf die Schaltfläche Abbrechen geklickt wird) und handelt entsprechend. Wenn der Benutzer nichts eingegeben und auf OK geklickt hat, wird der Benutzer darüber informiert und gefragt, ob er seinen Text abbrechen oder erneut eingeben möchte.
Post Notes: In meiner eigenen Implementierung stellte ich fest, dass allen anderen Antworten mindestens eine der folgenden fehlte:
Daher habe ich meine eigene Lösung veröffentlicht. Ich hoffe, jemand findet es nützlich. Dank an Bas und Gideon + Kommentatoren für Ihre Beiträge, Sie haben mir geholfen, eine praktikable Lösung zu finden!
quelle
Hier ist meine überarbeitete Version, die Multiline / Single als Option akzeptiert
quelle
Hier ist ein Beispiel in VB.NET
quelle