2013-08-23 2 views
1

Я пишу приложение на C# со следующим расположением элементов управления на форме.Как получить доступ к элементам управления в tabcontrol?

Во-первых, есть дочерняя форма, которая содержит разделительный контейнер, который поставляется с двумя панелями Panel1 слева и Panel2 справа. Панель 1 содержит флажки и текстовые поля. Панель 2 содержит элемент управления вкладкой. Каждая вкладка, созданная программно, содержит флажки и текстовые поля.

Когда я нажимаю «Сохранить» в верхней части дочерней формы, все данные из всех элементов управления Panel1 сохраняются в двоичном файле правильно. Затем процедура сохранения должна будет проходить через каждую вкладку в элементе управления вкладкой и сохранять данные из флажков и текстовых полей на каждой вкладке. Вот то, что я до сих пор:

   foreach (TabPage tab in tabControl1.TabPages) 
      { 
       string Question = tbQuestion.Text(tabControl1.SelectedIndex); 
      } 

К сожалению, tbQuestion.Text заканчивается с линией волнистые под ним, сообщение об ошибке, указывающее, что «не существует в текущем контексте.» То же самое произойдет со всеми другими элементами управления на каждой вкладке. Что мне нужно сделать для доступа к элементам управления на каждой вкладке?

ответ

2

Может попробовать что-то вроде:

foreach (TabPage tab in tabControl1.TabPages) 
{ 
    Control ctl = tp.Controls.Cast<Control>().Where(c=>c.Name=="tbQuestion").FirstOrDefault(); 

    string Question = ... ctl.Text; 
} 
0

Ну, если вы создаете их программно вы могли бы сделать что-то вроде

Dictionary<TextBox,Checkbox> questionsAndAnswers = new Dictionary<TextBox,CheckBox>(); 

то, как вы создаете пары элементов управления добавить запись. Вы можете пойти дальше и использовать Dictionary<string,bool>. Другим вариантом является выполнение всего этого итерации и привязка к List<T>, где T - это некоторый класс, который содержит абстракцию QuestionAnswer, устанавливает привязку программно, а ваша загрузка и сохранение кода должны иметь дело только с простым List<T> Это звучит сложнее , но вы можете удалить с него необыкновенное количество очень хрупкого кода. Еще лучше вы можете сбить UserControl и построить все это поведение, предпочтительно через интерфейс.

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

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

(CheckBox)Form.Controls[0].Controls[2].Controls[8] не только менее понятным, он сломался ...

+0

Спасибо за идеи, Тони. Я обязательно отправлю идею List . Это похоже на то, что мне нужно. Итерация через несколько вкладок звучит намного больше, чем мне действительно нужно. Если есть более простой способ, почему бы и нет? – user2272380

Смежные вопросы