#c# #vb.net #winforms #user-controls
#c# #vb.net #winforms #пользовательские элементы управления
Вопрос:
У меня есть пользовательский, UserControl
который содержит только один TextBox
.
Когда я устанавливаю для элемента управления значение Enabled = False
, текстовое поле отключено, но элемент управления — нет (элемент управления по-прежнему запускает Enter
событие).
Как мне гарантировать, что UserControl
не получит фокус?
Мое включенное свойство выглядит следующим образом:
Private _Enabled As Boolean = True
Public Shadows Property Enabled As Boolean
Get
Return _Enabled
End Get
Set(value As Boolean)
_Enabled = value
txtTime.Enabled = value
End Set
End Property
Комментарии:
1. @Hans — проблема с его удалением заключается в том, что текстовое поле не включается / отключается при изменении свойства UserControl Enabled
2. Это довольно неприятно, включенный всегда также отключает все дочерние элементы управления. Осторожнее с Тенями , они умеют отступать.
Ответ №1:
Чтобы ответить на ваш непосредственный вопрос, вам необходимо передать свойство enabled базовому объекту:
public new bool Enabled {
get { return _Enabled; }
set {
_Enabled = value;
textBox1.Enabled = value;
base.Enabled = value;
}
}
Однако… правильный способ сделать это — использовать OnEnabledChanged
переопределение:
protected override void OnEnabledChanged(EventArgs e) {
textBox1.Enabled = this.Enabled;
base.OnEnabledChanged(e);
}
(Поскольку вы пометили его C #, я предполагаю, что вы можете преобразовать обратно в VB.net самостоятельно)
Комментарии:
1. Спасибо — нет проблем с его преобразованием.
Ответ №2:
У каждого элемента управления уже есть свойство с именем Enabled. Для этого вам не нужно создавать свое собственное свойство.
Это свойство наследуется от Control
класса, который является базовым для всех элементов управления Windows forms.
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.aspx