2010-03-10 5 views

답변

61

클래스 다음

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

정의 ...

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

{get; 세트; } 여기 중요합니다. – pbies

+0

@pbies, 매우 유용한 의견을 주셔서 감사합니다! –

5

Language 개체의 속성 이름에 ValueMember/속성을 설정합니다. 읽기 "상자 아래로 하락함으로써

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

이 늘 일을, 당신이 아니 순수한 변수 – Fredou

+0

@Fredou을 속성을 사용해야합니다 : 그 고정. 고맙습니다! – thelost

16

원하는 콤보 상자에 많은 언어를 추가, 그 다음 수준의 언어

public class Language 
{ 
    public string Name{get;set;} 
    public string Value{get;set;} 
    public override string ToString() { return this.Name;} 
} 
만들기 오직 "나는 사용자가 값을 선택할 수없는 곳에 완전히 읽기 전용 인 것과 달리 사용자가 다른 옵션을 입력하는 것을 막기를 원한다고 가정하고 있습니까?

완전히 읽기 전용이되도록하려면 enabled 속성을 false로 설정할 수 있습니다.

+0

@Gregoire이 옵션은 콤보 상자의 표시 텍스트로 "영어"를 표시하지 않습니다. – James

+0

@James : corrected, thanks – Gregoire

+0

+1하지만 공개 문자열 ToString() {return this.Name + "/"+ this.Value;} 대신 썼습니다. – 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; 
     } 
    } 

:

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

@ MarkB29 : Enabled = false로 설정하면 사용자가 ComboBox를 입력하여 원하는 언어를 선택할 수 없습니다. 이것은 확실히 좋은 일이 아닙니다. 입소문은 사용자가 자신의 언어를 선택할 수 있기를 바랍니다. 그러나 Enabled = false는 허용하지 않습니다. ComboBox를 읽기 전용으로 설정하려면 DropDownStyle 속성을 DropDownStyle.DropDownList로 설정해야합니다. –

+0

@Will Marcouiller : 저는 이것을 실제로 제 대답에 넣었습니다. – MarkB29

+0

예, 그렇습니다. 내 오해를 용서해주십시오. 그러나 대답의 코드 샘플 다음에 Enabled 속성을 false로 설정하여 완전히 읽기 전용으로 설정합니다. 내 견해로는 ComboBox를 사용하지 않으면 아무런 이점도 나타나지 않습니다. 간단한 레이블은 일. 그것이 내가 의미했던 것입니다. 아마 너의 의도가 뭔가 빠져있다. –

4

읽기 전용으로 만들려면 DropDownStyle 속성을 DropDownStyle.DropDownList로 지정합니다. 그런 다음

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

, 당신이 그렇게처럼 ComboBox.DataSource 속성에 IList에 바인딩 할 수 있습니다 :

가 콤보 상자를 채우려면, 당신은 예를 들어 모두 포함하므로 언어와 같은 객체를하거나해야합니다

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

정확히 예상 한대로 작동합니다.

2

당신이 @ 그레 고어의 예와 유사한 새로운 클래스를 만들 수있다 할 수 있지만, 당신은 ToString()를 오버라이드 (override) 할 것 메서드를 사용하면 콤보 상자에 올바르게 표시됩니다.

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

당신은 단순히 새로운 클래스가 이것을 시도 만들지 않고 추가하려면 다음

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

난 당신이 당신이하지 않아도 그런 식으로 지원하는 모든 언어와 XML 파일을 제안 C# 에 의존해야합니다 위의 프로그래머가 제안한 것처럼 languge 클래스를 확실히 만들 것입니다.

1

특정 클래스의 언어를 사용할 필요가 없습니다,

를 그냥로 교체 :

KeyValuePair<string,string> 
0

하지만 어떻게 당신뿐만 아니라 다음 items.add("")를 콤보 상자의 이름을 얻을? 예를

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

희망이 들어

은 도움이 : D

관련 문제