Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как получить доступ к элементам формы из других классов?

12K
02 декабря 2006 года
sliderX
16 / / 12.08.2006
Вот нужно из другого класса например поменять параметры textbox1, как это сделать не создавая нового public static объекта типа textbox и приравнивания его к textbox1, это как-то ненормально.
273
02 декабря 2006 года
3A3-968M
1.2K / / 22.12.2005
Цитата: sliderX
Вот нужно из другого класса например поменять параметры textbox1, как это сделать не создавая нового public static объекта типа textbox и приравнивания его к textbox1, это как-то ненормально.


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

 
Код:
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#008080][FONT=Courier New]Form[/FONT][/COLOR][/SIZE][FONT=Courier New][SIZE=2][COLOR=#000000] targetForm = [/COLOR][/SIZE][SIZE=2][COLOR=#008080]Application[/COLOR][/SIZE][SIZE=2][COLOR=#000000].OpenForms[[/COLOR][/SIZE][SIZE=2][COLOR=#800000]"formName"[/COLOR][/SIZE][SIZE=2][COLOR=#000000]];[/COLOR]
[/SIZE][/FONT][/COLOR][/SIZE][SIZE=2][/SIZE]

Далее используешь имя текстбокса (опять же значение Name контрола):
 
Код:
[SIZE=2][COLOR=#008080][FONT=Courier New]TextBox[/FONT][/COLOR][/SIZE][FONT=Courier New][SIZE=2] textBox = ([/SIZE][SIZE=2][COLOR=#008080]TextBox[/COLOR][/SIZE][SIZE=2])targetForm.Controls[[/SIZE][SIZE=2][COLOR=#800000]"textBox"[/COLOR][/SIZE][SIZE=2]];
[/SIZE][/FONT]

Вот, собственно и всё.
12K
02 декабря 2006 года
sliderX
16 / / 12.08.2006
А еще короче никак? Может сами контролы можно как-то public static сделать?
713
03 декабря 2006 года
Ap0k
360 / / 13.03.2006
зачем Static??? :eek:
Вообще считаю признаком плохого тона модификацию состояния элементов управления из внешнего кода/класса. Лучше создать определенные событи формы или, как часто получается, необходимо отобразить/модифицировать своства объекта в форме применить следующий подход.
Объясню на примере:
Есть DataBound таблица (например DataGridView) в которой отображается список неких объектов, пусть это массив из экземпляров класса Client. Нужно, чтобы при двойном клике отображалось окно со свойствами выделенного экземпляра. Часто сталкивался (особенно в коде на Delphi) со случаями когда создается форма, а потом из кода, создающего форму заполняются TextBox`ы, выпадающие списки и т.д... потом смотришь код и думаешь, откуда?? откуда появились данные...
В таких случаях стоит перегрузить конструктор формы редактирования и передать в него экземпляр, а уже в конструкторе делать что-угодно...

PS: Возможно вышел небольшой оффтоп, но проято в своё время изматерился когда разбирал большой проект в котором повсеместно использован данный подход.
303
04 декабря 2006 года
makbeth
1.0K / / 25.11.2004
sliderX, не парься - создай public метод (или свойство) для модификации данных textBox и используй его. К форме получить доступ можно используя к примеру способ ЗАЗ-968М.
263
04 декабря 2006 года
koltaviy
816 / / 16.12.2004
Цитата: 3A3-968M
Тебе известно имя этой формы (значение свойства Name формы), где находиться нужный тебе контрол. Получаешь ссылку на эту форму по имени:
 
Код:
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#008080][FONT=Courier New]Form[/FONT][/COLOR][/SIZE][FONT=Courier New][SIZE=2][COLOR=#000000] targetForm = [/COLOR][/SIZE][SIZE=2][COLOR=#008080]Application[/COLOR][/SIZE][SIZE=2][COLOR=#000000].OpenForms[[/COLOR][/SIZE][SIZE=2][COLOR=#800000]"formName"[/COLOR][/SIZE][SIZE=2][COLOR=#000000]];[/COLOR][/SIZE][/FONT]
[/COLOR][/SIZE]

Далее используешь имя текстбокса (опять же значение Name контрола):
 
Код:
[SIZE=2][COLOR=#008080][FONT=Courier New]TextBox[/FONT][/COLOR][/SIZE][FONT=Courier New][SIZE=2] textBox = ([/SIZE][SIZE=2][COLOR=#008080]TextBox[/COLOR][/SIZE][SIZE=2])targetForm.Controls[[/SIZE][SIZE=2][COLOR=#800000]"textBox"[/COLOR][/SIZE][SIZE=2]];[/SIZE][/FONT]

Вот, собственно и всё.


А как обратится к таким компонентам, как [SIZE=2][COLOR=#008080]OleDbDataAdapter[/COLOR][/SIZE], например??
Они не принадлежат к коллекции Controls формы!!

713
04 декабря 2006 года
Ap0k
360 / / 13.03.2006
Если на то пошло, то измени в дизайнере (дожились :D) свойство Modifiers на public .
Вопрос был задан касательно TextBox.
OleDataAdapter скорее не компонент, а обычный класс с поддержкой дизайнера.
263
04 декабря 2006 года
koltaviy
816 / / 16.12.2004
Объясню ситуацию:
1) На главной форме существует меню "Справочники"(типа в 1C;))
2) Существует дочерняя форма Spravochnik
3) При щелчке на элементе меню, экземпляр дочерней формы создается с параметром в конструкторе "ИмяЭлементаМеню"..
Так вот в зависимости от того, что было "щелкнуто", применяется тот или иной dataAdapter, который лежит на дочерней форме!!
То, что вопрос был задан про TextBox - я вкурсе - читать умею:).. Чо мне новую тему по-твоему создавать теперь :):)
713
04 декабря 2006 года
Ap0k
360 / / 13.03.2006
хм... а почему бы не передать в конструктор то, что было щелкнуто?
Определить для этого соответствующее перечисление например. Если же нужно изменять данные в уже открытой дочерней форме, создай у неё public свойство. Тогда целостность и некая самостоятельность дочерней формы сохранится.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог