Comment afficher du texte dans la liste déroulante lorsque aucun élément sélectionné?
C# & .Net 2.0 question (WinForms)
J'ai mis des articles dans ComboBox
et non de leur sélectionné. Je voudrais afficher une chaîne de caractères sur combo "Veuillez sélectionner un élément" dans cette situation.
Actuel de la mise en œuvre est simplement ajouté un élément vide avec ce genre de texte sur l'indice de 0 et à le supprimer lorsque l'utilisateur de sélectionner l'un des éléments suivants. Malheureusement, un élément vide est affichée dans la liste déroulante. Comment faire pour éviter cette situation ou d'une autre manière qu'en - est-il possible d'afficher du texte personnalisé sur ComboBox
lorsqu'aucun élément n'est sélectionné?
Réponses ci-dessous fonctionne quand ComboBoxStyle
est fixé à DropDown
(ComboBox
est modifiable). Est-il possibilité de le faire quand ComboBoxStyle
est fixé à DropDownList
?
source d'informationauteur jotbek
Vous devez vous connecter pour publier un commentaire.
Utilisation de la méthode d'insertion de la zone de liste déroulante insérer le "Veuillez sélectionner un élément" à l'index 0,
et d'ajouter tous les éléments de la zone de liste déroulante après le premier indice. Dans le formulaire de charge de définir
EDIT:
Dans la forme de la charge d'écrire le texte dans la
comboBox1.Text
par coder en duret dans l'événement TextChanged de la comboBox1 écrire le code suivant
Voici comment je le fais. Il pourrait ne pas être la meilleure méthode, et offre moins de contrôle; toutefois, il est simple et rapide et j'ai pensé qu'il pourrait être une bonne idée de le partager afin que d'autres options sont disponibles pour les autres.
L'idée derrière cela est que la sélection initiale est à l'index 0, qui est réduite, de sorte qu'il n'est pas disponible en vertu de sélection pour l'utilisateur une fois qu'ils sélectionner quelque chose d'autre. L'inconvénient est que vous devez vous rappeler que si vous êtes à la recherche d'une index sélectionné, rappelez-vous que l'index 0 signifie qu'il n'y a pas de sélection.
devrait faire l'affaire
au démarrage, cette ligne est présente, lorsqu'il est sélectionné sur un élément de zone de liste déroulante, présente des éléments de texte s'affiche. lorsque deleling le texte ce texte apparaîtra de nouveau
Faire à la propriété Dropdownstyle de la zone de liste déroulante liste Déroulante et définir la liste déroulante zone de texte de "Sélectionner" comme ci-dessous
Je ne vois pas en natif .NET moyen de le faire, mais si vous voulez obtenir vos mains sales avec le sous-jacent Win32 contrôles...
Vous devriez être en mesure de l'envoyer à la
CB_GETCOMBOBOXINFO
message avec unCOMBOBOXINFO
structure qui contiendra l'édition interne de contrôle de la poignée.Vous pouvez ensuite envoyer le contrôle d'édition de la
EM_SETCUEBANNER
message avec un pointeur vers la chaîne.(Notez que cela nécessite au moins XP et des styles visuels pour être activé.
J'ai utilisé un rapide travail autour de sorte que j'ai pu garder la DropDownList style.
Si vous utilisez la liaison de données, vous devez créer une version factice du genre que vous êtes lié à l' - assurez-vous de le supprimer avant tout la persistance de la logique.
Une ligne après la forme
InitializeComponent();
Vous avez seulement besoin une fois à droite? Tout ce que vous devez faire si une reprise est obligatoire est de vérifier si la zone de dialogue index
!= -1
. Quelqu'un pourrait-il élaborer pourquoi les autres réponses à sauter à travers des cerceaux pour obtenir ce que ça va?La seule chose qui me manque ici est d'avoir juste ce premier texte en grisé. Si vous voulez vraiment que juste l'utilisation d'une étiquette à l'avant et de le désactiver une fois que l'index est changé.
Si aucune de ces solution de travail sont pour vous, pourquoi ne pas ajouter un peu de la validation sur la zone de liste déroulante quelque chose comme,
Ici vous pouvez trouver une solution créée par pavlo_ua:
Si vous en avez .Net > 2.0 et
Si vous en avez .Net == 2.0 (recherche de pavlo_ua réponse)
Acclamations, jbk
edit:
Afin d'avoir une bonne réponse n'est pas simplement le lien
Vous pouvez définir le Texte de la zone de liste déroulante quand son style est défini comme Déroulante (et il est modifiable).
Lorsque vous avez .Version Net < 3.0 il n'y a pas de propriété IsReadonly nous avons donc besoin d'utiliser win api pour définir la zone de texte de la zone de liste déroulante en readonly:
si
ComboBoxStyle
est fixé àDropDownList
alors la meilleure façon de s'assurer que l'utilisateur sélectionne un élément est de mettre enSelectedIndex = -1
qui sera videJe me rends compte que c'est un vieux thread, mais je voulais juste que d'autres personnes qui pourraient rechercher une réponse à cette question de savoir, dans l'actuelle version de Visual Studio (2015), il y a une propriété appelée "Texte de l'espace Réservé" qui fait quoi jotbek demandiez. Utilisez la boîte de dialogue Propriétés, sous l'onglet "Commun" des propriétés.
Malheureusement, aucun des ci-dessus a fonctionné pour moi, donc j'ai ajouté une étiquette sur le dessus de la comboxbox qui dit "s'il vous Plaît sélectionner". J'ai utilisé le code suivant pour afficher et masquer:
Quand j'ai initialiser mon combobox, si il n'y a pas de valeur sélectionnée, je l'amener à l'avant et à définir le texte:
Si il est une valeur sélectionnée, je l'envoie à l'arrière:
J'utilise ensuite les événements suivants pour déplacer l'étiquette à l'avant ou à l'arrière selon que l'utilisateur a sélectionné une valeur:
J'espérais trouver une solution à cette situation. Je vois que c'est un vieux post, mais en espérant que ma démarche peut simplifier le problème pour quelqu'un d'autre.
J'ai été en utilisant une zone de liste déroulante avec un menu déroulant style de DropDownList, mais cela devrait aussi fonctionner avec d'autres styles. Dans mon cas, je voulais que le texte à lire "Select Source" et je voulais que les autres options à "Fichier" et "Dossier"
Vous pouvez sélectionner l'indice 0 à la place si vous le souhaitez.
J'ai ensuite retiré le "Select Source" élément lorsque l'indice est modifiée comme il n'a plus d'importance si ce texte est visible.
Grâce
Pourquoi ne pas le faire XAML?