public override void SetProperty(DesignerPropertyInfo property, object obj) { base.SetProperty(property, obj); DesignerFlexibleFloat flexFloatAtt = property.Attribute as DesignerFlexibleFloat; if (flexFloatAtt != null) { unitLabel.Text = flexFloatAtt.Units; } DesignerFlexibleInteger flexIntegerAtt = property.Attribute as DesignerFlexibleInteger; if (flexIntegerAtt != null) { unitLabel.Text = flexIntegerAtt.Units; } CanUseDefinition canUseDefinition = (CanUseDefinition)property.Property.GetValue(obj, null); if (AIType.Current != null) { Type type = canUseDefinition.PropertyType; foreach (Definition definition in AIType.Current.Definitions) { PropertyInfo[] properties = definition.Object.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public); foreach (PropertyInfo prop in properties) { if (!prop.CanRead || prop.PropertyType != type) { continue; } comboBox.Items.Add(definition.Name + '.' + prop.Name); } } } if (canUseDefinition.DefinitionName != string.Empty && canUseDefinition.DefinitionMember != string.Empty) { string str = canUseDefinition.DefinitionName + '.' + canUseDefinition.DefinitionMember; if (!comboBox.Items.Contains(str)) { comboBox.Items.Insert(0, str); } comboBox.Text = str; } }
private void comboBox_SelectedIndexChanged(object sender, EventArgs e) { if (!_valueWasAssigned) { return; } CanUseDefinition canUseDefinition = (CanUseDefinition)_property.Property.GetValue(_object, null); string[] str = comboBox.Text.Split('.'); Debug.Check(str.Length == 2); canUseDefinition.DefinitionName = str[0]; canUseDefinition.DefinitionMember = str[1]; OnValueChanged(); }