J'utilise System.Windows.Forms
mais étrangement je n'ai pas la capacité de les créer.
Comment puis-je obtenir quelque chose comme une boîte de dialogue d'invite javascript, sans javascript?
MessageBox est sympa, mais il n'y a aucun moyen pour l'utilisateur d'entrer une entrée.
Je veux que l'utilisateur entre toute saisie de texte possible.
Réponses:
Vous devez créer votre propre boîte de dialogue d'invite. Vous pourriez peut-être créer une classe pour cela.
Et l'appelant:
Mise à jour :
Ajout du bouton par défaut (touche d' entrée ) et de la mise au point initiale basée sur les commentaires et une autre question .
la source
Ajoutez une référence
Microsoft.VisualBasic
et utilisez-la dans votre code C #:Pour ajouter la référence: faites un clic droit sur les références dans votre fenêtre Explorateur de projet puis sur Ajouter une référence, et vérifiez VisualBasic dans cette liste.
la source
Interaction
n'existe pas dans l'espace de nomsMicrosoft.VisualBasic
Une telle chose n'existe pas nativement dans Windows Forms.
Vous devez créer votre propre formulaire pour cela ou:
utilisez la
Microsoft.VisualBasic
référence.Inputbox est un code hérité introduit dans .Net pour la compatibilité VB6 - je vous conseille donc de ne pas le faire.
la source
Microsoft.VisualBasic.Compatibility
espace de noms.Microsoft.VisualBasic
est plus un ensemble de bibliothèques d'aide au-dessus de .Net et n'est pas vraiment spécifique à VB.Ce n'est généralement pas une très bonne idée d'importer les bibliothèques VisualBasic dans des programmes C # (non pas parce qu'elles ne fonctionnent pas, mais juste pour la compatibilité, le style et la capacité de mise à niveau), mais vous pouvez appeler Microsoft.VisualBasic.Interaction.InputBox () pour afficher le type de boîte que vous recherchez.
Si vous pouvez créer un objet Windows.Forms, ce serait mieux, mais vous dites que vous ne pouvez pas le faire.
la source
VisualBasic
, mais ce n'est que dans leur tête. Il n'y a pas de réalité à ce sentiment. Il serait tout aussi bien appelé l'Microsoft.MakeMyLifeEasierWithAlreadyImplementedMethods
espace de noms.Microsoft.VisualBasic.Compatibility
sous-espace de noms, pas le tout. De nombreuses fonctionnalités "principales" sont incluses dans l'Microsoft.VisualBasic
espace de noms; ça ne va nulle part. Microsoft a menacé de "suspendre" VB 6, pas VB.NET. Ils ont promis à maintes reprises que cela ne mènerait nulle part. Certaines personnes ne semblent toujours pas avoir compris la différence ...Autre façon de procéder: en supposant que vous avez un type d'entrée TextBox, créez un formulaire et que la valeur de la zone de texte est une propriété publique.
Dans le formulaire principal, ce sera le code:
;
De cette façon, le code semble plus propre:
la source
La réponse de Bas peut vous mettre en mémoire, théoriquement, puisque ShowDialog ne sera pas supprimé. Je pense que c'est une manière plus appropriée. Mentionner également que textLabel est lisible avec un texte plus long.
La mise en oeuvre:
la source
prompt
est nul à ce stade. Une solution simple pour permettre l'annulation de l'invite consiste à remplacer l'prompt.Dispose();
intérieur depublic void Dispose()
parif (prompt != null) { prompt.Dispose(); }
Sur la base du travail de Bas Brekelmans ci-dessus, j'ai également créé deux dérivations -> dialogues "input" qui vous permettent de recevoir de l'utilisateur à la fois une valeur textuelle et un booléen (TextBox et CheckBox):
... et du texte avec une sélection de l'une des multiples options (TextBox et ComboBox):
Les deux nécessitent les mêmes utilisations:
Appelez-les comme ça:
Appelez-les comme ça:
la source
La réponse de Bas Brekelmans est très élégante dans sa simplicité. Mais, j'ai trouvé que pour une application réelle, un peu plus était nécessaire, comme:
La classe ici gère ces limitations: http://www.codeproject.com/Articles/31315/Getting-User-Input-With-Dialogs-Part-1
Je viens de télécharger la source et copié InputBox.cs dans mon projet.
Surpris qu'il n'y ait pas quelque chose d'encore mieux cependant ... Ma seule vraie plainte est que le texte de légende ne prend pas en charge les nouvelles lignes car il utilise un contrôle d'étiquette.
la source
Malheureusement, C # n'offre toujours pas cette capacité dans les bibliothèques intégrées. La meilleure solution à l'heure actuelle est de créer une classe personnalisée avec une méthode qui affiche un petit formulaire. Si vous travaillez dans Visual Studio, vous pouvez le faire en cliquant sur Projet> Ajouter une classe
Visual C # items> code> classe
Nommez la classe PopUpBox (vous pouvez la renommer plus tard si vous le souhaitez) et collez le code suivant:
Vous devrez changer l'espace de noms pour celui que vous utilisez. La méthode renvoie une chaîne, voici donc un exemple de la façon de l'implémenter dans votre méthode d'appel:
Cette méthode vérifie la chaîne renvoyée pour une valeur de texte, une chaîne vide ou "annuler" (la méthode getUserInput renvoie "annuler" si le bouton d'annulation est cliqué) et agit en conséquence. Si l'utilisateur n'a rien entré et a cliqué sur OK, il le dira à l'utilisateur et lui demandera s'il souhaite annuler ou ressaisir son texte.
Notes de publication: Dans ma propre implémentation, j'ai constaté que toutes les autres réponses manquaient 1 ou plusieurs des éléments suivants:
Ainsi, j'ai publié ma propre solution. J'espère que quelqu'un le trouvera utile. Merci à Bas et Gideon + commentateurs pour vos contributions, vous m'avez aidé à trouver une solution réalisable!
la source
voici ma version refactorisée qui accepte les multilignes / single en option
la source
Voici un exemple dans VB.NET
la source