Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обращение к Controls на TabPage, обращение к автосозданным Controls 
:(
    Опции темы
vovkru
Дата 16.1.2014, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 16.1.2014
Где: Севастополь

Репутация: нет
Всего: нет



Попытаюсь максимально упростить задачу, что-бы было понятно.
На форме есть TabControl1,  Label1 и два Button
  При нажатии на кнопку button1 создаётся очередной TabPage и на нём Label 
Код

        private void button1_Click(object sender, EventArgs e)
        {
            TabPage newTabPage = new TabPage("New Tab page");
            tabControl1.Controls.Add(newTabPage);
            tabControl1.SelectedTab = newTabPage;

            Label label2 = new Label();
            label2.Text = "Label2";
            newTabPage.Controls.Add(label2);
        }

Как теперь обратиться к параметрам созданного Label ? К примеру изменить текст по нажатию кнопки button2 ?
 Ведь при написании 
Код

        private void button2_Click(object sender, EventArgs e)
        {
           label2.Text = "Проверка" ;
        }

 label2 ещё не существует как и label на всех остальных создаваемых TabPage, а они должны будут содержать собственную информацию.

PM MAIL   Вверх
jonie
Дата 16.1.2014, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



Если вы новчек, то лучше бы писали в тот раздел...
Код


Как теперь обратиться к параметрам созданного Label ?
взять его по имени (или индексу) из коллекций Controls того элемента в который вы его добавляли.

Но вообще настоящие мужики так не пишут. Это унылое ###, а не архитектура.

В простом случае:
Сначала выбрасывают из головы всякие "лейблы", "табы", и делают пустое консольное приложение. 
Далее описывают в нём вашу МОДЕЛЬ. Например так:
Код

public class PageData {
  //это типа описание того что на "таб-е" должно быть, например текст лейбла, только называть надо осмысленно конечно.
public string LabelCaption {get;set;}
}

public class Page {
 public string Id {get;set;}
 public string Caption {get;set;}
 public PageData Data  {get;set;}
}

public class PageCollection : ICollection<Page> {
//....implement me!
}


и т.д. - т.е. декомпозируют предметную область на классы.

Далее думают: "погодите, а ведь при добавлении в PageCollection кто-то должен об этом узнавать, значит надо реализовать паттерн "наблюдатель". Ок - сказано - сделано:
Код

partial class PageCollection : INotifyCollectionChanged {
  //implement me too!
}


Хмм, скажете вы, а если я поменяю Caption где-то в Page или PageData, то как заинтересованные об этом узнают ? Ок, надо реализоват наблюдатель и там:
Код

partial class Page : INotifyPropertyChanged {
 //todo
}

partial class PageData : INotifyPropertyChanged {
 //todo
}


Оккей, теперь можно подумать как к этому мусору прикручивать интерфейсную часть. Набрасываем всякие разные контролы в презентере (ну если мы например юзаем MVP паттерн) подписываемся на всё что надо у модели и управляем ВИДОМ.

А вид может вызывать (вероятно) некоторые изменения модели - нет проблем - достаточно делегировать изменение презентеру в уже существующей модели....

Вуаля.!


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
vovkru
Дата 17.1.2014, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 16.1.2014
Где: Севастополь

Репутация: нет
Всего: нет



Благодарствую! Есть от чего отталкиваться!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1151 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.