[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]
Как получить доступ к элементам формы из других классов?
Вот нужно из другого класса например поменять параметры textbox1, как это сделать не создавая нового public static объекта типа textbox и приравнивания его к textbox1, это как-то ненормально.
Цитата: sliderX
Вот нужно из другого класса например поменять параметры textbox1, как это сделать не создавая нового public static объекта типа textbox и приравнивания его к textbox1, это как-то ненормально.
Тебе известно имя этой формы (значение свойства Name формы), где находиться нужный тебе контрол. Получаешь ссылку на эту форму по имени:
Код:
Далее используешь имя текстбокса (опять же значение 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][/FONT]
Вот, собственно и всё.
А еще короче никак? Может сами контролы можно как-то public static сделать?
Вообще считаю признаком плохого тона модификацию состояния элементов управления из внешнего кода/класса. Лучше создать определенные событи формы или, как часто получается, необходимо отобразить/модифицировать своства объекта в форме применить следующий подход.
Объясню на примере:
Есть DataBound таблица (например DataGridView) в которой отображается список неких объектов, пусть это массив из экземпляров класса Client. Нужно, чтобы при двойном клике отображалось окно со свойствами выделенного экземпляра. Часто сталкивался (особенно в коде на Delphi) со случаями когда создается форма, а потом из кода, создающего форму заполняются TextBox`ы, выпадающие списки и т.д... потом смотришь код и думаешь, откуда?? откуда появились данные...
В таких случаях стоит перегрузить конструктор формы редактирования и передать в него экземпляр, а уже в конструкторе делать что-угодно...
PS: Возможно вышел небольшой оффтоп, но проято в своё время изматерился когда разбирал большой проект в котором повсеместно использован данный подход.
sliderX, не парься - создай public метод (или свойство) для модификации данных textBox и используй его. К форме получить доступ можно используя к примеру способ ЗАЗ-968М.
Цитата: 3A3-968M
Тебе известно имя этой формы (значение свойства Name формы), где находиться нужный тебе контрол. Получаешь ссылку на эту форму по имени:
Далее используешь имя текстбокса (опять же значение 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]
[/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 формы!!
Вопрос был задан касательно TextBox.
OleDataAdapter скорее не компонент, а обычный класс с поддержкой дизайнера.
1) На главной форме существует меню "Справочники"(типа в 1C;))
2) Существует дочерняя форма Spravochnik
3) При щелчке на элементе меню, экземпляр дочерней формы создается с параметром в конструкторе "ИмяЭлементаМеню"..
Так вот в зависимости от того, что было "щелкнуто", применяется тот или иной dataAdapter, который лежит на дочерней форме!!
То, что вопрос был задан про TextBox - я вкурсе - читать умею:).. Чо мне новую тему по-твоему создавать теперь :):)
Определить для этого соответствующее перечисление например. Если же нужно изменять данные в уже открытой дочерней форме, создай у неё public свойство. Тогда целостность и некая самостоятельность дочерней формы сохранится.