Вот код, который мы использовали в недавнем проекте. Он обрабатывает локализованные строки Enum (передавая объект ResourceManager
) и напрямую заполняет массив .Items
вместо использования DataSource - это полезно для заполнения ComboBox
, включая установку его .SelectedItem
, перед его или его родительские элементы управления видимы.
public static void PopulateComboBox<T>(ComboBox box, ResourceManager res) {
box.FormattingEnabled = true;
ListControlConvertEventHandler del = delegate(object sender, ListControlConvertEventArgs e) {
e.Value = res.GetString(e.Value.ToString());
};
box.Format -= del;
box.Format += del;
box.BeginUpdate();
box.Items.Clear();
foreach(T value in Enum.GetValues(typeof(T))) {
box.Items.Add(value);
}
box.EndUpdate();
}
Используйте это как:
PopulateComboBox<MyEnum>(myComboBox, MyEnumStrings.ResourceManager);