webentwicklung-frage-antwort-db.com.de

Füllen einer ComboBox mit C #

Ich möchte eine Combobox mit folgendem füllen:

Sichtbarer Artikel/Artikelwert

English / En

Italian / It

Spainish / Sp 

etc....

Hilfe bitte?

Ist es auch möglich, dass die Combobox nach dem Auffüllen nur gelesen wird?

28
mouthpiec

Definieren Sie eine Klasse

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

dann...

//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;
64
Allen Rice

Erstellen Sie eine Klassensprache

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

Fügen Sie dann der Combobox so viele Sprachen hinzu, wie Sie möchten:

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

Legen Sie die ValueMember/DisplayMember Eigenschaften auf den Namen der Eigenschaften Ihrer Language Objekte fest.

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"));
5
thelost

Um es schreibgeschützt zu machen, muss die DropDownStyle-Eigenschaft DropDownStyle.DropDownList enthalten.

Um die ComboBox aufzufüllen, benötigen Sie ein Objekt wie Language oder so, das beispielsweise beide enthält:

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

Dann können Sie eine IList an Ihre ComboBox.DataSource-Eigenschaft wie folgt binden:

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

Dies wird genau das tun, was Sie erwarten.

4
  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;
        }
    }

Wenn Sie Ihre Dropdown-Box als "schreibgeschützt" festlegen, gehe ich davon aus, dass Sie verhindern möchten, dass der Benutzer andere Optionen eingibt, als vollständig schreibgeschützt zu sein, wo Benutzer keinen Wert auswählen können.

Wenn Sie möchten, dass es vollständig schreibgeschützt ist, können Sie die aktivierte Eigenschaft auf false setzen.

3
MarkB29

Sie könnten eine neue Klasse erstellen, ähnlich dem Beispiel von @ Gregoire. Sie möchten jedoch die ToString()-Methode überschreiben, damit sie im Kombinationsfeld richtig angezeigt wird, z.

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;
    }
}
2
James

Wenn Sie es einfach hinzufügen möchten, ohne eine neue Klasse zu erstellen, versuchen Sie Folgendes:

// 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;
}

Ich schlage eine XML-Datei mit allen Ihren Sprachen vor, die Sie unterstützen werden Auf diese Weise müssen Sie nicht auf c # Angewiesen sein. 

1
hidden

Keine Notwendigkeit, eine bestimmte Klasse Sprache zu verwenden,

Ersetzen Sie es einfach durch:

KeyValuePair<string,string>
1
Aelios

Einfacher Weg ist:

Dictionary<string, string> dict = new Dictionary<string, string>()
{
    {"English ","En" },
    {"Italian  ","It" },
    {"Spainish  ","Sp " }
};

combo.DataSource = new BindingSource(dict, null);
combo.DisplayMember = "Key";
combo.ValueMember = "Value";
1
Tiago S

aber bekommen Sie nicht einfach nur Ihren Kombinationsfeldnamen und dann items.add("")?

Zum Beispiel 

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

Hoffe das hat geholfen: D

0
Zyak