当我使用类似文本内容初始化组合框时,其中eo
是一个带有ToString()
覆盖的对象:
foreach (EncodingInfo ei in Encoding.GetEncodings()) {
Encoding e = ei.GetEncoding();
encodeObject eo = new encodeObject();
eo.Name = ei.DisplayName;
eo.Value = ei.Name;
int targetIndex = this.targetEncodingBox.Items.Add(eo);
}
我可以使用
将其设置为默认值this.targetEncodingBox.SelectedIndex = targetIndex
但是,当实际对该框进行排序时,并且最初使用Add()
方法输入到框中的数据未排序,则在重新排序框时保留默认索引,从而导致完全不同几乎所有时间都选择了价值。
对此的基本解决方案是查找组合框将显示的生成值并使用FindStringExact
:
this.targetEncodingBox.SelectedIndex = this.targetEncodingBox.FindStringExact("utf-8 -- Unicode (utf-8)");
但是,这会导致其他问题。有问题的字符串可能取决于此特定情况下用户的操作系统的语言设置。事先不知道这一点。
因此,我发现的另一种方法是第二次手动查找编码名称,并在完全填充该框后设置SelectedIndex
,使用相同的约定将首字母缩略词名称和翻译后的名称连接为用于encodeObject.ToString();
的定义。
foreach (EncodingInfo ei in Encoding.GetEncodings()) {
if (ei.Name == "utf-8") {
this.sourceEncodingBox.SelectedIndex = this.sourceEncodingBox.FindStringExact(ei.Name + " -- " + ei.DisplayName);
}
}
注意:下面的课程encodeObject
的定义:
private class encodeObject {
public string Name;
public string Value;
public override string ToString() {
return Value + " -- " + Name;
}
}
这实际上是有效的,并且完全符合我的要求,但解决方案似乎非常笨重,可以做一些真正应该是一次通话的事情。有没有更好的方法来实现这一目标?
答案 0 :(得分:0)
正如Hans评论的那样,您需要创建该列表并将其存储到变量中。 由于可用的编码无论如何都不太可能改变,这可能发生在某些类构造函数中或加载设置时。
然后可以在任何需要的地方重复使用此变量,它也可以轻松更新和更新。按你喜欢的方式排序。
在此步骤之后,其余部分是微不足道的,使用默认值/索引创建变量,并且一旦为此列表分配了ComboBox,只需将SelectedValue / SelectedIndex值设置为默认值/ index。