私はそうのようなテキストコンテンツとのコンボボックスを初期化すると、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()
メソッドを使用して最初にボックスに入力されたデータがソートされていない場合は、ボックスが再ソートされている間はデフォルトのインデックスが保持され、ほとんど異なる値が選択されます。
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
の定義コール。これを達成するより良い方法はありますか?
コンボボックスに追加する前に、簡単にコレクションを並べ替えてください。 –
SelectedIndexの代わりにSelectedItemを使用できますか? – RyanTimmons91
デフォルトで選択されるはずの 'eo'オブジェクトのリファレンスを保存していないのですが、ソートが完了したら' targetEncodingBox.SelectedItem = savedDefaultEo'を設定してください。 – Vikhram