Puede usar un enlace bidireccional en la propiedad SelectedItem del ComboBox. Al agregar valores al cuadro combinado, asegúrese de agregar los valores enum y no solo las cadenas que coincidan con su nombre para mostrar.
comboBox.Items.Add(ConsoleColor.Red);
comboBox.Items.Add(ConsoleColor.Blue);
// ... etc
Ahora SelectedItem se puede fijar o para conseguir que la enumeración en lugar de como una cadena.
EDITAR
suena como tal vez su objetivo no plantea notificaciones de cambio de propiedad que forma Windows requiere para detectar que los cambios en el objeto subyacente necesitan ser refrescados en la interfaz de usuario. Here is an article acerca de cómo hacer eso.
EDIT 2
Aquí está un ejemplo de código. Verifiqué que esto funciona correctamente.
public partial class Form1 : Form {
private Person p = new Person();
public Form1() {
InitializeComponent();
comboBox1.DataSource = Enum.GetValues(typeof(Gender));
textBox1.DataBindings.Add("Text", p, "Name", false, DataSourceUpdateMode.OnPropertyChanged);
comboBox1.DataBindings.Add("SelectedItem", p, "Gender", false, DataSourceUpdateMode.OnPropertyChanged);
label1.DataBindings.Add("Text", p, "Name", false, DataSourceUpdateMode.Never);
label2.DataBindings.Add("Text", p, "Gender", false, DataSourceUpdateMode.Never);
}
private void Form1_Load(object sender, EventArgs e) {
// yeah, that's right i voted for him,
// go ahead and downvote me
p.Name = "John McCain";
p.Gender = Gender.Male;
}
private void Form1_Click(object sender, EventArgs e) {
p.Name = "Sarah Palin";
p.Gender = Gender.Female;
}
}
public enum Gender {
Male,
Female
}
public class Person : INotifyPropertyChanged {
private string name;
private Gender gender;
public string Name
{
get { return name; }
set {
name = value;
PropertyChanged(this, new PropertyChangedEventArgs("Name"));
}
}
public Gender Gender {
get { return gender; }
set {
gender = value;
PropertyChanged(this, new PropertyChangedEventArgs("Gender"));
}
}
public event PropertyChangedEventHandler PropertyChanged = delegate {};
}
¿Lo intentó? – SLaks
¿Cuál? Intenté el artículo pero no resuelve el problema cuando actualizo DataObject.DataEnum, el ComboBox no se actualiza. Si también tengo que hacerlo manualmente, ¿de qué sirve el enlace de datos? Podría hacerlo todo yo mismo a mano. –
¿No estás levantando una notificación cambiada de propiedad? Windows Forms utilizará INotifyPropertyChanged o un evento DataEnumChanged para detectar cambios en su objeto subyacente. Tendrá que hacer una u otra para que el enlace de Windows Forms sepa que se ha producido un cambio. – Josh