Добавление кнопок на вкладку TabControl в C # - PullRequest
5 голосов
/ 29 ноября 2011

У меня есть TabControl в форме окна. Я прагматично добавил новые вкладки, такие как:

for (int i = 1; i < numOfLanguages; i++)
{
     // add a tab for each language
     string tabTitle = split[i];
     TabPage newTab = new TabPage(tabTitle);
     languageTabs.TabPages.Add(newTab);
}

внутри цикла. Я хочу установить другие элементы управления для каждой вкладки. в основном я хочу добавить кнопки. Я видел этот код:

tabPage1.Controls.Add(new Button());

Исходя из этого примера, я хочу сделать что-то похожее на:

languageTabs.SelectTab(split[i]).Add(new Button());

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

Есть идеи сообщества?

Ответы [ 2 ]

3 голосов
/ 29 ноября 2011

SelectTab перемещает фактическую TabControl на указанную вкладку, она не возвращает вкладку, чтобы позволить вам манипулировать ею.


Вы можете проиндексировать вкладки следующим образом:

languageTabs.TabPages[2].Controls.Add(new Button());

Если вы установили свойство Name в TabPage при создании, то вы также можете найти отдельные вкладки по ключу:

for (int i = 1; i < numOfLanguages; i++)
{
     // add a tab for each language
     string tabTitle = split[i];
     TabPage newTab = new TabPage(tabTitle);
     newTab.Name = tabTitle;
     languageTabs.TabPages.Add(newTab);
}

...

languageTabs.TabPages[split[i]].Controls.Add(new Button());

( Подробнее см. MSDN )

В зависимости от того, что наиболее удобно.

0 голосов
/ 29 ноября 2011

LINQ?

languageTabs.TabPages.First(tab => tab.Title == split[i]).Add(new Button());

Это может быть ненадежно (сбой), если ваш tabcontrol не имеет вкладки с определенным именем, поэтому вам может потребоваться более надежный способ:

if (languageTabs.TabPages.Exists(tab => tab.Title == split[i]))
{
    languageTabs.TabPages.First(tab => tab.Title == split[i]).Add(new Button());
}
...