Цикл управления в TabControl - PullRequest
       60

Цикл управления в TabControl

4 голосов
/ 16 ноября 2009

Я ищу способ перебрать элементы управления на определенной вкладке tabcontrol. Например, у меня есть tabcontrol со следующими вкладками:

Автомобили, Домашние питомцы, Администратор

На каждой из этих вкладок есть несколько элементов управления для отображения / редактирования / сохранения данных и т. Д. На кнопке «Сохранить» я хотел бы просмотреть элементы управления для этой конкретной вкладки, чтобы проверить, были ли заполнены все обязательные поля. .

Итак, если я нахожусь на вкладке «Автомобили» и нажимаю «Сохранить», я хочу просмотреть ТОЛЬКО элементы управления на вкладке «Автомобили», а НЕ вкладки «Домашние животные» или «Администратор».

Как можно достичь этого результата?

Ответы [ 7 ]

10 голосов
/ 16 ноября 2009

Что касается циклического просмотра элементов управления TabControl, вам необходимо использовать свойство Controls.

Вот статья MSDN о TabControl.

Пример:

        TabPage page = aTabControl.SelectedTab;

        var controls = page.Controls;

        foreach (var control in controls)
        {
            //do stuff
        }
8 голосов
/ 16 ноября 2009

Мне кажется, важно отметить, что в целом вы должны применять более структурированный подход к своему приложению. Например, вместо того, чтобы иметь все элементы управления на трех вкладках, включите ровно один UserControl на каждую вкладку. A CarUserControl, PetUserControl и AdminUserControl, например. Затем каждый пользовательский элемент управления знает, как создать правильную соответствующую структуру данных, чтобы вам не приходилось вручную обрабатывать все это вместе на одном уровне абстракции, используя циклы между вкладками и все такое.

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

2 голосов
/ 16 ноября 2009

Пример, в котором я хотел получить DataGridView на отдельной вкладке для приложения, которое я написал.

TabPage pg = tabControl1.SelectedTab;

// Get all the controls here
Control.ControlCollection col = pg.Controls;

// should have only one dgv
foreach (Control myControl in col)
{
    if (myControl.ToString() == "System.Windows.Forms.DataGridView")
    {
        DataGridView tempdgv = (DataGridView)myControl;   
        tempdgv.SelectAll();
    }
}
1 голос
/ 16 ноября 2009

Свойство Controls - это путь ...

foreach(Control c in currentTab.Controls)
{
    if(c is TextBox)
        // check for text change
    if(c is CheckBox)
        //check for check change
    etc...
}
0 голосов
/ 28 марта 2014

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

    private void toggleControls(Control control, bool state)
    {
        foreach (Control c in control.Controls)
        {
            c.Enabled = state;
            if (c is Control)
            {
                toggleControls(c, state);
            }
        }
    }
0 голосов
/ 16 ноября 2009
foreach (Control c in this.tabControl1.SelectedTab.Controls)
{
  // Do something
}
0 голосов
/ 16 ноября 2009

TabControl имеет свойство SelectedTab, поэтому вы должны сделать что-то вроде этого:

foreach(Control c in tabControl.SelectedTab.Controls)
{
    //do checks
}
...