2009-02-07 4 views
13

Voglio usare un ComboBox con lo stile DropDownList (quello che fa sembrare un pulsante in modo da non poter inserire un valore) per inserire un valore in una casella di testo. Voglio che la casella combinata abbia un'etichetta di testo chiamata "Caratteri jolly" e mentre seleziono un carattere jolly dall'elenco il valore selezionato viene inserito in una casella di testo e il testo della casella combinata rimane "Caratteri jolly". Il mio primo problema è che non riesco a impostare un valore di testo quando la casella combinata è in stile DropDownList. Utilizzando il pallet delle proprietà non funziona, il valore del testo viene semplicemente cancellato quando si fa clic, aggiungendo comboBox.Text = "Caratteri jolly"; a form_load non funziona neanche. Qualcuno può aiutare?ComboBox C# in stile DropDownList, come posso impostare il testo?

risposta

23

Il codice si specifica:

comboBox.Text = "Wildcards"; 

... dovrebbe funzionare. L'unica ragione per cui non è che il testo specificato non è un elemento all'interno dell'elenco degli elementi di ComboBox. Quando si utilizza lo stile DropDownList, è possibile impostare solo testo su valori effettivamente visualizzati nell'elenco.

Se si sta tentando di impostare il testo su caratteri jolly e quell'elemento non viene visualizzato nell'elenco e una soluzione alternativa non è accettabile, potrebbe essere necessario essere un po 'sporchi con il codice e aggiungere un elemento temporaneamente rimosso quando l'elenco a discesa viene espanso.

Ad esempio, se si dispone di un modulo contenente una casella combinata denominata "comboBox1" con alcuni articoli e un pulsante denominato "button1" si potrebbe fare qualcosa di simile:

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"); 
} 

che è abbastanza veloce e sporco, ma da catturando anche l'evento DropDownClosed è possibile ripulirlo un po ', aggiungendo l'elemento "Wildcards" come necessario.

+1

Grazie per questo, ho imparato molto del mio C# dal sito web blackwasp e mi riferisco ancora ad esso. Grazie! –

+0

Siete i benvenuti :-) – BlackWasp

+1

Stranamente, l'impostazione della proprietà "Text" all'interno del form designer non è sufficiente - deve essere impostata nel codice retrostante nel mio caso. Tentare di impostarlo dalla finestra delle proprietà del modulo cancellerebbe semplicemente la proprietà "Testo" dopo averne fatto clic. – Rachael

-1

Prova questo

comboBox1.SelectedValue = "Wildcards"; 
-1

Questa può essere una possibile soluzione:

comboBox1.SelectedValue = comboBox1.Items.FindByText("Wildcards").Value; 
2

È possibile selezionare una delle voci sul FormLoad o in costruttore del form:

public MyForm() 
{ 
    InitializeComponent(); 

    comboBox.SelectedIndex = 0; 
} 

o

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

Mi piace quanto sia pulita questa soluzione. +1 –