Привязка события ко всем объектам TextBox в форме win - PullRequest
1 голос
/ 06 февраля 2012

У меня много текстовых полей в одном приложении winform.Я ищу способ привязать один метод события ко всем этим текстовым полям при загрузке формы или в ее конструкторе, поэтому я не добавляю событие в каждое отдельное текстовое поле в конструкторе.

В этом событии я хочучтобы обнаружить клавишу ВВОД, а затем программно нажать на кнопку:

private void ApplyFilterOnEnterKey(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        btnApplyFilters_Click(this, null);
    }
}

Теперь проблема в том, как я могу перебрать все текстовые поля в моей форме и привязать их к вышеуказанному методу?Мои текстовые поля находятся повсюду, внутри вложенных табличных таблиц или обычных вложенных панелей.Как будет выглядеть этот цикл и где его поставить?В конструкторе формы или в событии load?!

Ответы [ 4 ]

1 голос
/ 06 февраля 2012

Выполнить цикл по всем текстовым полям (включая вложенные), как показано ниже: Выполнить цикл по текстовым полям

Затем

var allTextBoxes = this.GetChildControls<TextBox>();

foreach (TextBox tb in this.GetChildControls<TextBox>())
{
    tb.Click += ApplyFilterOnEnterKey;
}
1 голос
/ 06 февраля 2012

Вместо подписки на каждое событие KeyDown TextBox у вас есть два других варианта, которые я считаю более подходящими:

  1. Установите кнопку в качестве кнопки по умолчанию для формы, установив AcceptButton свойство формы для кнопки, которую вы хотите нажать, нажав клавишу Enter.

  2. Переопределите ProcessDialogKey в вашей форме и проверьте нажатие клавиши Enter:

    protected override bool ProcessDialogKey(Keys keyData)
    {
        if (keyData == Keys.Enter)
        {
            // ... do what you want
            return true;
        }
        else
            return base.ProcessDialogKey(keyData);
    }
    
1 голос
/ 06 февраля 2012

Просто используйте коллекцию Controls и посмотрите, является ли элемент управления текстовым полем, затем добавьте событие

0 голосов
/ 22 января 2019
    private void TextBoxFocusIn(object sender, EventArgs e)
    {
        TextBox textBox = (TextBox)sender;
        if (textBox.Text == "Encrypted value here...")
        {
            textBox.Text = "";
            textBox.ForeColor = Color.Black;
        }
    }

    private void TextBoxFocusOut(object sender, EventArgs e)
    {
        TextBox textBox = (TextBox)sender;
        if (textBox.Text =="")
        {
            textBox.Text = "Encrypted value here...";
            textBox.ForeColor = Color.Gray;
        }
    }


    private void BindPlaceHolderInTextbox(Panel contentPanel)
    {
         foreach(Control control in contentPanel.Controls)
        {
            if(control.GetType() == typeof(TextBox))
            {
                control.Text = "Encrypted value here...";
                control.ForeColor = Color.Gray;
                control.GotFocus += new System.EventHandler(TextBoxFocusIn);
                control.LostFocus += new System.EventHandler(TextBoxFocusOut);
            }
        }
    }
...