Поиск всех TextBox по всей форме

Есть форма с tabControl в tabControl еще множество tabPage, на каждом tabPage имеются textBox. Необходимо пройтись по всей форме всем ее tabControl и tabPage и получить содержимого всех textBoxПытаюсь это сделать так:
foreach (Control C in Controls)
            {
                if (C is TextBox)
                {
                    Post_File.Add(С.Text);
                }
 
            }
но выборка упорно не хочет заходить на все tabPage как реализовать сею выборку?
9 ответов

var result=from tabControl in fr.Controls.OfType<TabControl>()
             select (from page in tabControl.TabPages.Cast<TabPage>()
                        select 
                         (from textBoxe in page.Controls.OfType<TextBox>()
                              select textBoxe.Text));


AndryD, надо рекурсивно шариться по Controls у каждого элементана псевдо-коде примерно так:
void Find(Control c)
{
  foreach (ctrl...) { if (TextBox) { делаем_действие(); } Find(ctrl); }
}


А сделал я так....
foreach (Control c in Controls)
            {
                foreach (Control c1 in c.Controls)
                {
                    foreach (Control c2 in c1.Controls)
                    {
                        foreach (Control c3 in c2.Controls)
                        {
                            foreach (Control c4 in c3.Controls)
                            {
                                foreach (Control c5 in c4.Controls)
                                {
                                    foreach (Control c6 in c5.Controls)
                                    {
                                        if (c6== TextBox) MyMetod(c6);
                                    }
                                    if (c5== TextBox) MyMetod(c5);
                                }
                                if (c4== TextBox) MyMetod(c4);
                            }
                            if (c3== TextBox) MyMetod(c3);
                        }
                        if (c2== TextBox) MyMetod(c2);
                    }
                    if (c1== TextBox) MyMetod(c1);
                }
                if (c== TextBox) MyMetod(c);
            }
Таким обазом удалось перелопатить все Controls


AndryD, ж0стко, но работать тоже будет. ((Ж А что это за проверка такая странная: if (c== TextBox) наверное, c is TextBox?


Rififi, я обшибся, руками просто вбивал... там --> c is TextBox


искал почти тоже самое, кое-что нашел и упростил, получилось так:
        private void ggggToolStripMenuItem_Click(object sender, EventArgs e)
        { Rec(this); }
        private void Rec(Control c)
        {
            foreach (Control c1 in c.Controls)
            { if (c1.Controls.Count > 0){Rec(c1);}}
        }
Вообщем, если в нужном месте поставить проверку на текстбох, то найдет все...


не проверял, но можно попробовать так:
public List<T> GetControls<T>(Control control)
{
    List<T> control_list = new List<T>();
    foreach (Conrol c in control.Controls)
    {
        if (c is T)
        {
            control_list.Add(c);
            control_list.AddRange(GetControls<T>(c));
        }
    }
    return control_list;
}


Непонятно как пользоваться структурой: public List GetControls(Control control)Если можно скиньте действующий проект..


Проекта нет, я его писал прямо на форуме. а пользоваться просто
List<Buttom> list = GetControls<Button>(this.tabControl1);
// or
List<TextBox> list = GetControls<TextBox>(this.tabControl1);