Я хочу выставить некоторые свойства в своем настраиваемом элементе управления. Мне нужно получить ввод для трех параметров, которые я выставляю как объекты Browsable
из элемента управления. На основании ввода для одного свойства другие два могут не потребоваться. Как я могу отключить/скрыть свойства, которые не требуются на основе выбора для первого свойства?Отключить свойство в Design View Property Grid
2
A
ответ
3
Да, с небольшим отражением, вы можете достичь этого:
public class TestControl : Control {
private string _PropertyA = string.Empty;
private string _PropertyB = string.Empty;
[RefreshProperties(RefreshProperties.All)]
public string PropertyA {
get { return _PropertyA; }
set {
_PropertyA = value;
PropertyDescriptor pd = TypeDescriptor.GetProperties(this.GetType())["PropertyB"];
ReadOnlyAttribute ra = (ReadOnlyAttribute)pd.Attributes[typeof(ReadOnlyAttribute)];
FieldInfo fi = ra.GetType().GetField("isReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
fi.SetValue(ra, _PropertyA == string.Empty);
}
}
[RefreshProperties(RefreshProperties.All)]
[ReadOnly(true)]
public string PropertyB {
get { return _PropertyB; }
set { _PropertyB = value; }
}
}
Это отключит PropertyB всякий раз, когда PropertyA пустая строка.
Обнаружена эта статья в the Code Project, которая описала этот процесс.
спасибо, дорогой, посмотрим! – TheVillageIdiot