обнаружение события нажатия клавиши для всех текстовых полей внутри вложенной TableLayoutPanel - PullRequest
0 голосов
/ 27 ноября 2011

У меня есть ряд вложенных TableLayoutPanel элементов управления, каждый из которых содержит множество TextBox элементов управления.

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

Это мой обычный метод (надеюсь, в этом нет ничего плохого!):

private void ApplyFiltersOnEnterKey(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == (char)13)
    {
        tsApplyFilters_Click(this, null);
    }
}

И у меня есть следующий код в Load событии моей формы:

    //Applying common event for all textboxes in filter options!
foreach (var control in tableCriterias.Controls)
{
    var textBox = control as TextBox;
    if (textBox != null)
        textBox.KeyPress += new KeyPressEventHandler(this.ApplyFiltersOnEnterKey);
} 

Ну, может быть, вы уже догадались, коды выше не работает! Я могу перечислить проблемы, о которых могу подумать:

  • tableCriterias, который является родительским TableLayoutPanel, и все остальные панели макетов находятся внутри него, находятся ли они внутри серии Panel SplitContainer и .... Мне нужно указать это в моем цикле?
  • Или я рекурсивно зацикливаюсь на каждой макетной панели внутри главной макетной панели?
  • Или вся идея неверна? !!?

Спасибо.

1 Ответ

2 голосов
/ 27 ноября 2011
private void Recursive(TableLayoutPanel tableCriterias)
{
    foreach (var control in tableCriterias.Controls)
    {
        var textBox = control as TextBox;
        if (textBox != null)
            textBox.KeyPress += new KeyPressEventHandler(this.ApplyFiltersOnEnterKey);
        else if(control is TableLayoutPanel)
            Recursive(control as TableLayoutPanel);
    } 
}

И вызовите этот метод для parent TableLayoutPanel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...