web-dev-qa-db-fra.com

ComboBox C # dans le style DropDownList, comment définir le texte?

Je veux utiliser un ComboBox avec le style DropDownList (celui qui le fait ressembler à un bouton pour que vous ne puissiez pas entrer de valeur) pour insérer une valeur dans une zone de texte. Je veux que la zone de liste déroulante ait une étiquette de texte appelée "caractères génériques" et lorsque je sélectionne un caractère générique dans la liste, la valeur sélectionnée est insérée dans une zone de texte et le texte de la zone de liste déroulante reste "caractère générique". Mon premier problème est que je n'arrive pas à définir une valeur de texte lorsque la zone de liste déroulante est dans le style DropDownList. L'utilisation de la palette de propriétés ne fonctionne pas, la valeur du texte est simplement effacée lorsque vous cliquez dessus, ajoutant comboBox.Text = "Wildcards"; to form_load ne fonctionne pas non plus. Quelqu'un peut-il aider?

19
James May

Le code que vous spécifiez:

comboBox.Text = "Wildcards";

...devrait marcher. La seule raison pour laquelle ce ne serait pas le cas, c'est que le texte que vous spécifiez n'est pas un élément dans la liste d'éléments de la zone de liste déroulante. Lorsque vous utilisez le style DropDownList, vous pouvez uniquement définir Texte sur des valeurs qui apparaissent réellement dans la liste.

Si vous essayez de définir le texte sur les caractères génériques et que cet élément n'apparaît pas dans la liste, et qu'une autre solution n'est pas acceptable, vous devrez peut-être être un peu sale avec le code et ajouter temporairement un élément qui est supprimé lorsque la liste déroulante est développée.

Par exemple, si vous avez un formulaire contenant une zone de liste déroulante nommée "comboBox1" avec certains éléments et un bouton nommé "button1", vous pouvez faire quelque chose comme ceci:

private void button1_Click(object sender, EventArgs e)
{
    if (!comboBox1.Items.Contains("Wildcards"))
    {
        comboBox1.Items.Add("Wildcards");
    }

    comboBox1.Text = "Wildcards";
}

private void comboBox1_DropDown(object sender, EventArgs e)
{
    if (comboBox1.Items.Contains("Wildcards"))
        comboBox1.Items.Remove("Wildcards");
}

C'est assez rapide et sale, mais en capturant également l'événement DropDownClosed, vous pouvez le nettoyer un peu, en ajoutant l'élément "Wildcards" si nécessaire.

33
BlackWasp

Vous pouvez sélectionner l'un des éléments sur formload ou dans le constructeur de formulaire:

public MyForm()
{
    InitializeComponent();

    comboBox.SelectedIndex = 0;
}

ou

private void MyForm_Load(object sender, EventArgs e)
{
    comboBox.SelectedIndex = 0;
}
4
Roman Bukin