2017-09-01 25 views
0

私はそうのようなテキストコンテンツとのコンボボックスを初期化すると、eoToString()オーバーライドして、いくつかのオブジェクトです:ソートされたコンボボックスにデフォルト値を設定するにはどうすればよいですか?

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()メソッドを使用して最初にボックスに入力されたデータがソートされていない場合は、ボックスが再ソートされている間はデフォルトのインデックスが保持され、ほとんど異なる値が選択されます。

this.targetEncodingBox.SelectedIndex = this.targetEncodingBox.FindStringExact("utf-8 -- Unicode (utf-8)");

しかし、これは他の問題につながる:

このための基本的な解決策は、コンボボックスがFindStringExactを表示し、使用することを生成した値をルックアップするためです。問題の文字列は、この特定のケースではユーザーのオペレーティングシステムの言語設定に依存する場合があります。これは事前に知ることはできません。

私が見つけたもう1つの方法は、手動でエンコーディングの名前をもう一度検索し、ボックスに完全に入力した後に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

SelectedIndexの代わりにSelectedItemを使用できますか? – RyanTimmons91

+0

デフォルトで選択されるはずの 'eo'オブジェクトのリファレンスを保存していないのですが、ソートが完了したら' targetEncodingBox.SelectedItem = savedDefaultEo'を設定してください。 – Vikhram

答えて

0

Hansがコメントしたように、そのリストを作成して変数に格納する必要があります。 利用可能なエンコーディングはとにかく変わることはないので、これは一部のクラスコンストラクターや設定をロードするときに発生します。

この変数は必要な場所で再利用でき、好きなようにソートされた&も簡単に更新できます。

この手順の後、残りの部分は簡単です。デフォルト値/インデックスを持つ変数を作成し、ComboBoxにこのリストを割り当てたら、SelectedValue/SelectedIndex値をデフォルト値/インデックスに設定します。

関連する問題