什么是在排序后的组合框中设置默认值的好方法?

什么是在排序后的组合框中设置默认值的好方法?

问题描述:

当我初始化像这样的文本内容的组合框,其中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); 
      } 
     } 

注:

private class encodeObject { 
     public string Name; 
     public string Value; 
     public override string ToString() { 
      return Value + " -- " + Name; 
     } 
    } 

这实际工作,并准确我想要做什么,但解决方案似乎很笨重的做一些事情,真的应该是一个单一的:类encodeObject的下面的定义呼叫。有没有更好的方法来实现这一点?

+3

保持简单和自己整理收集,将其添加到组合框之前。 –

+2

您可以使用SelectedItem而不是SelectedIndex吗? – RyanTimmons91

+0

你为什么不存储将会被默认选择了'eo'对象的引用,一旦排序完成后,只要设置'targetEncodingBox.SelectedItem = savedDefaultEo'? – Vikhram

正如汉斯评论你需要创建一个列表,并将其存储到一个变量。 由于可用的编码不可能改变,所以这应该发生在某个类的构造函数中,或者当你加载你的设置。

这个变量则可以在任何地方重复使用,你需要它,它也可以很容易地更新&分类,只要你喜欢。

完成这一步之后,其余的操作很简单,创建一个默认值/索引的变量,一旦ComboBox被分配了这个列表,只需将SelectedValue/SelectedIndex值设置为默认值/索引即可。