2010-03-10 76 views
23

me gustaría llenar un cuadro combinado con lo siguiente:Llenar un ComboBox con C#

visible artículo/Elemento Valor

English/En 

Italian/It 

Spainish/Sp 

etc.... 

Cualquier ayuda por favor?

También es posible que después de rellenar el Combobox, para que sea de solo lectura?

Respuesta

61

Definir una clase

public class Language 
{ 
    public string Name { get; set; } 
    public string Value { get; set; } 
} 

entonces ...

//Build a list 
var dataSource = new List<Language>(); 
dataSource.Add(new Language() { Name = "blah", Value = "blah" }); 
dataSource.Add(new Language() { Name = "blah", Value = "blah" }); 
dataSource.Add(new Language() { Name = "blah", Value = "blah" }); 

//Setup data binding 
this.comboBox1.DataSource = dataSource; 
this.comboBox1.DisplayMember = "Name"; 
this.comboBox1.ValueMember = "Value"; 

// make it readonly 
this.comboBox1.DropDownStyle = ComboBoxStyle.DropDownList; 
+5

The {get; conjunto; } es importante aquí. – pbies

+0

@pbies gracias, comentario muy útil! –

5

Establezca las propiedades ValueMember/DisplayMember al nombre de las propiedades de sus objetos Language.

class Language 
{ 
    string text; 
    string value; 

    public string Text 
    { 
     get 
     { 
      return text; 
     } 
    } 

    public string Value 
    { 
     get 
     { 
      return value; 
     } 
    } 

    public Language(string text, string value) 
    { 
     this.text = text; 
     this.value = value; 
    } 
} 

... 

combo.DisplayMember= "Text"; 
combo.ValueMember = "Value"; 
combo.Items.Add(new Language("English", "en")); 
+0

esto no funcionará, debe utilizar las propiedades de este, no es pura variable de – Fredou

+0

@Fredou: Me fijo que. ¡Gracias! – thelost

16

crear un lenguaje de clase

public class Language 
{ 
    public string Name{get;set;} 
    public string Value{get;set;} 
    public override string ToString() { return this.Name;} 
} 

A continuación, añadir el mayor número de idiomas a la lista desplegable que desea:

yourCombobox.Items.Add(new Language{Name="English",Value="En"}); 
+0

@Gregoire esto no mostrará "Inglés" como el texto de la pantalla en el cuadro combinado. – James

+0

@James: corregido, gracias – Gregoire

+0

+1 Pero escribí públicamente la cadena de sobrescritura ToString() {return this.Name + "/" + this.Value;} en su lugar. – Javier

3
Language[] items = new Language[]{new Language("English", "En"), 
       new Language("Italian", "It")}; 

      languagesCombo.ValueMember = "Alias"; 
      languagesCombo.DisplayMember = "FullName"; 
      languagesCombo.DataSource = items.ToList(); 

      languagesCombo.DropDownStyle = ComboBoxStyle.DropDownList; 

class Language 
    { 
     public string FullName { get; set; } 
     public string Alias { get; set; } 

     public Language(string fullName, string alias) 
     { 
      this.FullName = fullName; 
      this.Alias = alias; 
     } 
    } 

Al hacer su cuadro desplegable "lectura solo "Supongo que desea evitar que los usuarios tipeen otras opciones en lugar de ser totalmente de solo lectura cuando los usuarios no pueden seleccionar un valor".

Si desea que sea de solo lectura, puede configurar la propiedad habilitada para que sea falsa.

+0

@ MarkB29: Enabled = false evitará que el usuario ingrese al ComboBox para seleccionar el idioma que desea. Esto definitivamente no es algo bueno. Creo que mouthpiec desea que el usuario pueda seleccionar su idioma, aunque Enabled = false no lo permita. Para establecer un ComboBox de solo lectura, debe establecer su propiedad DropDownStyle en DropDownStyle.DropDownList. –

+0

@Will Marcouiller: De hecho, he puesto esto en mi respuesta. – MarkB29

+0

Sí, de hecho. Disculpe mi malentendido, pero después de la muestra del código de su respuesta, usted especifica establecer la propiedad Habilitada en falso para que sea totalmente de solo lectura, lo que desde mi punto de vista deshabilitar un ComboBox no representa ninguna ventaja, ya que una simple etiqueta trabajo. Eso es a lo que me refiero. Quizás estoy perdiendo algo de tu intención. –

4

Para que sea de solo lectura, la propiedad DropDownStyle para DropDownStyle.DropDownList.

Para rellenar el cuadro combinado, tendrá que tener un objeto como el lenguaje o por lo tanto contiene por ejemplo:

public class Language { 
    public string Name { get; set; } 
    public string Code { get; set; } 
} 

Entonces, es posible enlazar un IList a su propiedad ComboBox.DataSource así:

IList<Language> languages = new List<Language>(); 
languages.Add(new Language("English", "en")); 
languages.Add(new Language("French", "fr")); 

ComboxBox.DataSource = languages; 
ComboBox.DisplayMember = "Name"; 
ComboBox.ValueMember = "Code"; 

Esto hará exactamente lo que espera.

2

Lo que podría hacer es crear una nueva clase, similar a @ ejemplo de Gregoire, sin embargo, que se quiere anular el ToString() método para que aparezca correctamente en el cuadro combinado, por ejemplo

public class Language 
{ 
    private string _name; 
    private string _code; 

    public Language(string name, string code) 
    { 
     _name = name; 
     _code = code; 
    } 

    public string Name { get { return _name; } } 
    public string Code { get { return _code; } } 
    public override void ToString() 
    { 
     return _name; 
    } 
} 
1

Si simplemente desea agregarlo sin crear una nueva clase intente esto:

// WPF 
<ComboBox Name="language" Loaded="language_Loaded" /> 


// C# code 
private void language_Loaded(object sender, RoutedEventArgs e) 
{ 
    List<String> language= new List<string>(); 
    language.Add("English"); 
    language.Add("Spanish"); 
    language.Add("ect"); 
    this.chartReviewComboxBox.ItemsSource = language; 
} 

que sugieren un archivo XML con todos los idiomas que va a apoyar de esa manera usted no tiene que Depende de C# Definitivamente crearía una clase para languge como sugiere el programador anterior.

1

No hay necesidad de utilizar un lenguaje de clase en particular,

Sólo sustituirlo por:

KeyValuePair<string,string> 
0

pero ¿no acaba de obtener su nombre combo caja y luego items.add("")?

Por ejemplo

Language.Items.Add("Italian"); 
Language.Items.Add("English"); 
Language.Items.Add("Spanish"); 

Espero que esto ayudó: D

Cuestiones relacionadas