Ayrton Yagami Ответов: 2

Как вызвать событие в каждом текстовом поле проекта.


Что я действительно хочу, так это вызвать событие Enter и Leave всего проекта textBox, без необходимости устанавливать это событие textbox по textbox.

Я создал клавиатуру и хочу, чтобы она открывалась всякий раз, когда пользователь хочет что-то ввести (Enter event), и закрывала клавиатуру, когда текстовое поле теряет фокус.

Вызов был брошен, давайте, ребята !!!!

Что я уже пробовал:

Я пробовал помещать вызов клавиатуры текстовое поле за текстовым полем, но это не очень продуктивно для меня, потому что проект слишком большой, чтобы сделать это.

BillWoodruff

"проект слишком грандиозный "

означает ли это, что вам нужно найти все текстовые поля во всех открытых формах во время выполнения ? Более одной формы ?

2 Ответов

Рейтинг:
5

APE-Germany

Вы можете сделать цикл foreach на элементах управления. Рекурсивная функция, которая регистрирует каждое текстовое поле для события.


Рейтинг:
20

APE-Germany

public Form1()
 {
     InitializeComponent();
     RegisterTextBoxEvent(this);
 }


 private void RegisterTextBoxEvent(Control baseCtrl)
 {
     foreach(Control ctrl in baseCtrl.Controls)
     {
         if(ctrl.GetType() == typeof(TextBox))
         {
             ((TextBox)ctrl).Enter += MyEnterEvent;
         }

         RegisterTextBoxEvent(ctrl);
     }
 }

 private void MyEnterEvent(object sender, EventArgs e)
 {
     Console.WriteLine(((TextBox)sender).Name);
 }


Richard Deeming

if(ctrl.GetType() == typeof(TextBox))


Вероятно, было бы лучше использовать то as оператор[^] здесь:
TextBox txt = ctrl as TextBox;
if (txt != null)
{
    txt.Enter += MyEnterEvent;
}


Или, если вы используете современный компилятор, используйте сопоставление с образцом[^]:
if (ctrl is TextBox txt)
{
    txt.Enter += MyEnterEvent;
}