WinForms UserControl Как мне остановить фокус получения элемента управления

#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