2016-05-19 4 views
1

У меня есть форма окна с несколькими вкладками. Я хочу иметь массив типа «TabPage», который будет содержать каждую вкладку, и я хочу инициализировать ее при объявлении. Я уже пробовалИнициализация массива табуляции при объявлении

TabPage[] tabs = {Tab1, Tab2}; 
TabPage[] tabs = new TabPage[]{Tab1, Tab2}; 
TabPage[] tabs = new TabPage[2]{Tab1, Tab2}; 

Но все это не работает.

Кроме того, я попытался выполнить итерацию по каждой вкладке в элементе управления вкладкой, чтобы добавить их каким-либо образом в массив, но похоже, что в коллекции «Tab_Control.TabPages» нет метода «ToArray()», а массив табуляции doesn ' t имеет метод «AddRange».

Как инициализировать страницы вкладок в объявлении массива и как их добавить в объявление объявления массива?

+2

Если это форма уровневый код, вы не можете инициализировать их с 'TabPage' ссылок, потому что они не будут существовать до тех пор, пока прогонов CTOR. Вместо массива рассмотрим «Список », который будет более гибким. – Plutonix

+1

Возможно, вам лучше использовать 'List ' или даже использовать 'Dictionary ' или 'Dictionary ' таким образом, чтобы вы могли получать доступ к вашим страницам вкладок с помощью идентификатора. «Список <>» или «Словарь <>» является масштабируемым, поэтому вы всегда можете вызвать '.Add()' для добавления другой закладки. – gmiley

ответ

1

It seems there is no "ToArray()" method in the "Tab_Control.TabPages" collection.

Чтобы получить массив закладок из элемента управления вкладкой, вы можете использовать:

var pages = tabControl1.TabPages.Cast<TabPage>().ToArray(); 

Вы также можете использовать ToList() метод, который возвращает вам List<TabPage>, который является более гибким, чем массив.
Также имейте в виду, что вы должны написать этот код после InitializeComponents или, например, в форме Load.


Вы не можете инициализировать tabs поле на уровне формы таким образом:

TabPage[] tabs = new TabPage[] { tabPage1, tabPage2 }; 

Вы получите ошибку компиляции:

A field initializer cannot reference the non-static field, method, or property 'tabPage1'

Но вы можете определить поле массива на уровне формы TabPage[] tabs, а затем в Form Load или в конструкторе после InitializeComponents присвойте значения массиву:

tabs = new TabPage[] { tabPage1, tabPage2 }; 
+1

В общем, если вы хотите получить доступ к этим страницам или использовать их в цикле, вам не нужно сохранять ссылку на них в массиве или списке, достаточно использовать коллекцию 'tabControl1.TabPages'. –

+0

Да, я просто понял, что, но все же, мог бы также узнать что-то новое. :) – mathgenius

+0

Метод 'Cast ' настолько полезен, когда вы хотите преобразовать коллекцию объектов в список или массив объектов T. –

2

TabPageCollection уже IList и IEnumerable. Этого должно быть достаточно.

Если вам нужен простой синтаксис массива, вы можете попробовать это:

var tabs = new[] {tabPage1, tabPage2}; 
Смежные вопросы