Как проверить все текстовые поля внутри splitcontainer? - PullRequest
1 голос
/ 06 января 2012

Моя программа использует разделенный контейнер, на обеих панелях 1 и 2 которого есть текстовые поля. Я пытаюсь запустить проверку, когда программа пытается закрыть, которая предлагает пользователям сохранить. Я попробовал следующий код, но он, похоже, не работает, так как текстовые поля находятся в splitcontaier (просто угадать).

private void button1_Click(object sender, EventArgs e)
    {
        foreach ( TextBox tb in this.Controls.OfType<TextBox>()) 
        {
            tb.Text = "Save";

        }
    }

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

  foreach ( TextBox tb in splitContainer1.Controls.OfType<TextBox>()) 
       {               
           tb.Text = "Save";
        }

Как я могу получить его для адресации текстовых полей внутри splitcontainer?

Я могу указать текстовые поля на определенной панели и делать их по одному за раз:

//this works, but only populates those text boxes in panel1
foreach ( TextBox tb in splitContainer1.Panel1.Controls.OfType<TextBox>() ) 
       {               
           tb.Text = "save";
        }

Но я все еще не могу сделать это в 1 тесте. Я должен проверить обе панели независимо друг от друга.

1 Ответ

2 голосов
/ 06 января 2012

Вам нужно что-то вроде комментария Липи, рекурсивно проверять все элементы управления определенного типа.

С помощью такого метода вы можете создать метод действия для каждого TextBox.

public void ModifyControl<T>(Control root, Action<T> action) where T : Control
{
    if (root is T)
        action((T)root);
    // Call ModifyControl on all child controls
    foreach (Control control in root.Controls)
        ModifyControl<T>(control, action);
}

Вы называете это как:

ModifyControl<TextBox>(splitContainer1, tb => tb.Text = "Save");
...