Индексирование в коллекцию элементов управления на вкладке Control - PullRequest
2 голосов
/ 27 декабря 2011

У меня есть приложение на вкладке C # Forms.У каждой вкладки есть меню слева (панель навигации в стиле Outlook) и панель справа для содержимого.

Если я хочу панель содержимого для вкладки 0, как мне ее получить?Я немного озадачен, потому что не знаю, как индексировать коллекцию элементов управления на вкладке.Следующее подчеркнуто красным, поэтому я считаю, что это неправильно.

Panel panel = tabControl.TabPages[0].Controls["Panel"];

РЕДАКТИРОВАТЬ: удалить окно в подвопросе панели.Он будет перенесен на отдельный вопрос.

Извините за вопросы новичка.Я C / C ++ парень с большим количеством времени на MFC, и C # UI немного разочаровывает в данный момент.

Ответы [ 4 ]

1 голос
/ 27 декабря 2011

Возможность инкапсулировать сложное содержимое пользовательского интерфейса - создать UserControl.Таким образом, вы можете создать многократно используемый фрагмент сложного пользовательского интерфейса, который вы можете добавить как блоб внутри формы.

Причина, по которой

Panel panel = tabControl.TabPages[0].Controls["Panel"];

подчеркнута красным, заключается в том, что Controls collection возвращает Control, который может быть Panel, но может быть и другим.Поэтому вам нужно разыграть его:

Panel panel = tabControl.TabPages[0].Controls["Panel"] as Panel;
if (panel != null)
{
     // got a panel here so do something
}

Также: у MSDN есть несколько хороших ресурсов - вы должны использовать его.

1 голос
/ 27 декабря 2011
foreach (Control control in tabControl1.TabPages[0].Controls)
{
    // if (control.Name == "panel1")
}

Вы всегда можете вызвать это рекурсивно на control.Controls, чтобы найти элемент управления в любой иерархии. control.Name может использоваться для поиска вашего конкретного элемента управления.

Вы не можете показать форму внутри панели. Вы можете создать пользовательский элемент управления, где вы можете добавить свою функциональность и добавить этот элемент управления на панель.

1 голос
/ 27 декабря 2011

Finally, how does one display a Window in a Panel? - вы не хотите этого делать.Если вы хотите, чтобы окно и панель совместно использовали часть функциональности пользовательского интерфейса, создайте пользовательский элемент управления со всеми функциями, а затем поместите его в форму или на панель.

1 голос
/ 27 декабря 2011

Например, чтобы создать новую форму, вам нужно создать переменную той формы, которую вы хотите создать.пример

Form2 frm2 = new Form2();
frm2.Show(); 

если вы хотите отобразить эту форму на панели, тогда панель будет владельцем, помните о разнице между владельцем и родителем, пожалуйста, вставьте код, который у вас есть, и мы можем предложитьнеобходимые изменения

...