【发布时间】:2011-01-25 22:53:24
【问题描述】:
我想用以下内容填充组合框:
可见项目/项目价值
English / En
Italian / It
Spainish / Sp
etc....
有什么帮助吗?
也有可能在填充 Combobox 后使其只读?
【问题讨论】:
我想用以下内容填充组合框:
可见项目/项目价值
English / En
Italian / It
Spainish / Sp
etc....
有什么帮助吗?
也有可能在填充 Combobox 后使其只读?
【问题讨论】:
将ValueMember/DisplayMember 属性设置为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"));
【讨论】:
创建类语言
public class Language
{
public string Name{get;set;}
public string Value{get;set;}
public override string ToString() { return this.Name;}
}
然后,向组合框中添加所需的语言:
yourCombobox.Items.Add(new Language{Name="English",Value="En"});
【讨论】:
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;
}
}
通过将您的下拉框设置为“只读”,我假设您希望阻止用户输入其他选项,而不是在用户无法选择值的情况下完全只读??
如果您希望它是完全只读的,您可以将 enabled 属性设置为 false。
【讨论】:
要使其成为只读,请将 DropDownStyle 属性设置为 DropDownStyle.DropDownList。
要填充 ComboBox,您需要有一个像 Language 这样的对象,例如包含两者:
public class Language {
public string Name { get; set; }
public string Code { get; set; }
}
然后,您可以像这样将 IList 绑定到您的 ComboBox.DataSource 属性:
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";
这将完全符合您的预期。
【讨论】:
定义一个类
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;
【讨论】:
dataSource 列表中添加或删除项目时,这是否会自动更新组合框元素?
您可以创建一个新类,类似于@Gregoire 的示例,但是,您需要覆盖ToString() 方法,以便它正确显示在组合框中,例如
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;
}
}
【讨论】:
如果你只是想添加它而不创建新类,试试这个:
// 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# 我肯定会像上面的程序员建议的那样为语言创建一个类。
【讨论】:
无需使用特定的类语言,
只需将其替换为:
KeyValuePair<string,string>
【讨论】:
但是你不只是得到你的组合框名称然后items.add("")吗?
例如
Language.Items.Add("Italian");
Language.Items.Add("English");
Language.Items.Add("Spanish");
希望这会有所帮助:D
【讨论】:
简单的方法是:
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";
【讨论】: