| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > Как обратиться к объекту другой формы |
| Автор: Анальгин 20.5.2005, 10:05 |
| Модератор: В данной теме приводятся конкретные советы и решения по поводу "Как из одной формы обратиться к другой форме". Пожалуйста, в поисках ответа внимательно читайте сообщения в этой теме. Повторно заданные вопросы в разделах .NET будут автоматически перенаправляться в эту тему, с закрытием исходных тем. Как это на Дельфи. Имеем : Form1 (Unit1.pas) Form2 (Unit2.pas) Чтобы мне из Form1 "видеть" Form2 и все объекты на ней достаточно в Unit1.pas включить строку - uses Unit2; И теперь я могу, например, сделать так : Form2.Edit1.Text:='ля-ля-ля'; Каков аналог в C# ? |
| Автор: AntonSaburov 20.5.2005, 10:50 |
| Еслиони в одном проекте - то вообще ничего не надо. Если же в другом using <Имя проекта>; |
| Автор: Анальгин 20.5.2005, 10:58 |
| у меня один проект и в нем 2 формы. Например пробую изменить Text у textBox1 перед показом 2й формы Пишу NewForm frm=new NewForm(); NewForm.textBox1.Text="ля-ля-ля"; frm.ShowDialog(); и получаю NewForm.textBox1' is inaccessible due to its protection level |
| Автор: AntonSaburov 20.5.2005, 11:04 |
| Так у тебя обявление формы NewForm содержит это поле как protected. Выведи его в public. |
| Автор: Анальгин 20.5.2005, 11:15 |
| ты имеешь виду это? изменить привате на паблик у техтбокса ? ~~~~~~~~~~ вырезал из листинга второй формы public class NewForm : System.Windows.Forms.Form { private System.Windows.Forms.TextBox textBox1; ..... |
| Автор: mr.DUDA 20.5.2005, 11:51 | ||
Да. А лучше - создать public-свойство только на чтение, в котором возвращать ссылку на textBox1. |
| Автор: Анальгин 20.5.2005, 12:02 |
| меняю на public и в ответ : F:\.....\Form1.cs(304): An object reference is required for the nonstatic field, method, or property '.....NewForm.textBox1' mr.DUDA может конечно лучше, но это не сейчас (сейчас только на 62 странице "полное руководство Visual C#.Net) Как все гиморно в C# по сравнению с Дельфи |
| Автор: AntonSaburov 20.5.2005, 12:18 | ||||
Так надо так:
|
| Автор: Анальгин 20.5.2005, 12:20 |
| AntonSaburov огромное спасибо ! все ок. |
| Автор: stab 21.5.2005, 09:56 | ||
Через пару месяцев будешь наоборот думать ;) Всегда сложно учить новое, но как интересно |
| Автор: Сергей Плоткин 13.8.2006, 18:25 |
| Поднимаю. Надеюсь в эту тему кто-нибудь еще заглянет... Начинаю мигрировать C#, тоже с Делфи. Может быть кто-нибудь подскажет решение вышеуказанной задачи (в первом сообщении темы) только с точностью до наоборот: имеются 2 формы. на 1-ой textBox1 и button1 (при нажатии создает экземпляр Form2 и показывает), на второй только button1. Что нужно сделать, чтобы при клике на кнопку button1, находящуюся во 2-ой форме, менялось поле text у объекта textBox1, находящегося на 1-ой (главной) форме? Буду очень благодарен за помощь. |
| Автор: mr.DUDA 13.8.2006, 19:30 |
| Передаём ссылку на Form1 в конструктор Form2, в обработчике кнопки на форме2 меняем текст в текстбоксе. Текстбокс по-простому можно либо сделать пабликом, либо доступным через открытое св-во. |
| Автор: ivashkanet 13.8.2006, 21:46 | ||||||||||
Сам просил VS -- это всего лишь крутой "блокнот". Создает все и вся среда .Net (а именно: JTI-компилятор)
Не понял этой фразы Неужели после объявления класса формы в Дэлфи его экземпляр сразу же начинает существовать? А как к нему обращаться? По имени класса? Тогда для каждой новой формы придется писать свой класс. Так? Тут все по другому (если я конечно прав выше).
Это "чертеж" нового "здания" (формы), а не само "здание". Дальше можно на основании этого "чертежа" возводить сколько угодно новых "зданий".
f, g, k, l --- все РАЗНЫЕ экземпляры форм. Сделанные по общему "чертужу". И чтобы с ними работать тебе всегда нужна ссылка на конкретный экземпляр. Именно поэтому нужно его передавать другой форме. Чтобы она могла работать с полями текущей формы
Никто ничего не защищал Просто ты наверное пробовал обратиться к ним через имя класса?
Но ведь form1 --- это чертеж! С ним нельзя работать как с реальным объектом. Чтобы можно было работать с "чертежом" (самим классом, а не его экземпляром) его элемент(ы) должен быть объявлен как static (т.е. общий для всех экземпляров класса) Фроде фисё P.S. В нашем полку прибыло? P.P.S. Код писал по памяти, так что мог где-нить накосячить с синтаксисом |
| Автор: Сергей Плоткин 13.8.2006, 22:13 | ||||||||||
Очень хочется вступить в обсуждение, т.к. очень интересно во всем разобраться... Если это все не по теме, то очень прошу модератора не гневаться
Да это я знаю (что это крутой блокнот).
В делфи все совсем по-другому. Когда моделируешь форму, ты моделируешь именно экземпляр формы. Т.е. даже свойство "Name" у формы (допустим Form1) в дизайн-тайм - это имя не класса, а именно экземпляра класса TForm1. А класс TForm1 (наследник TForm) создает автоматом. К такому-то принципу я и привык. А в VS (C#, .NET - я уже запутался Насчет чертежей и зданий - я понял.
Нет, я обращался именно к экземпляру. Я понимаю, что могу свободно редактировать свойства самой формы (экземпляра), например ее заголовок. Зато без танцев с бубном (конечно, уверен со временем мне покажется, что это логично и никак по другому и быть не может) я не могу обратиться к свойствам объекта, лежащего на этой форме.
Спасибо большое за гостеприимство! |
| Автор: mr.DUDA 14.8.2006, 10:50 | ||||||||
Всё понятно. Класс называется TForm1, а экземпляр - Form1. Переменная экземпляра формы, наверно, даже где-то объявлена В WinForms похожий подход, дизайнером тоже создаётся специальный метод InitializeComponent, в который кладётся всё, что мы дизайним и настраиваем в Properties. Вот только экземпляр типа Form1 не создаётся автоматически - мы должны позаботиться об этом сами, т.к. изначально есть возможность создать много экземпляров одного класса (TForm1). К примеру, главная форма приложения создаётся в методе Main():
Конечно, дельфисту поначалу это может показаться непривычным, но со временем привычки изменятся, и всё станет на свои места З.Ы. можно в принципе замутить статик-переменную с экземпляром формы, заполнять её в конструкторе формы, и тогда вполне можно обратиться к формам так (при условии, что указанная форма существует в данный момент времени):
или так:
НО однозначно более правильным способом остаётся передача экземпляра одной формы в конструктор другой. |
| Автор: 3me1 14.8.2006, 12:36 |
| Все предельно просто. создаем в классе формы указатель на "родительскую" форму public class ChildForm { private ParentForm parentForm; ///ctor public child(ParentForm link) { this.parentForm=link; } ................. } вот и все... теперь создаем э.ф. ... { ChildForm childForm=new ChildForm(this); childForm.Show(); } и соответственно обращаемся к родителю просто parentForm. ....; |
| Автор: mr.DUDA 14.8.2006, 12:50 |
| 3me1, это то о чём неоднократно говорилось: |
| Автор: kobra 14.8.2006, 15:00 | ||
в этои теме несколько раз прозвучало что компоненти входящие в состав формы нужно осавлять приватними, а для работы с ними писать своии паблик методы. честно говоря я в первые такое слышу. может обясните почему так? если по мне, ето не совсем правилно, из однои формы часто управляю елементами на другои форме. и зачем писать при етом собственные методы, когда ети методы уже есть? |
| Автор: ivashkanet 14.8.2006, 15:13 | ||
kobra, есть принцип ООП -- инкапсуляция называется. Звучит он примерно так: Никакие данные внутри класса изменять нельзя. Можно только попросить класс изменить что-то, и если эти изменения согласуются с внутренней политикой класса, то он их сделает. Определение, конечно, бестолковое, но суть проясняет Например тебе в классе формы хочется, чтобы в ее заголовке отображалось содержимое некоторого текстБокса. Если теперь напрямую поменять значение текстбокса, то не факт что форма его подхватит. Конечно можно подписаться на событие смены текста в текстбоксе. Но это только пример |
| Автор: kobra 14.8.2006, 16:57 |
| на счет инкапсулации все понятно. и пример твои вполне коректен. так как загаловок формы это своиство класа формы. я спрашиваю про то что менять например текст текстбокса расположенного на форме. в подобнои теме недавно было, что законы ООП и инкапсулация требуют создать метод класса формы. но по моему текстбокс не входит в клас формы, он ползуится этим класом как контеинером. и исходя из этого нужно работать с ним напримую а не через клас формы (правда при этом приходится указывать какои егземпляр формы содержит этот текстбокс, но кажется эта другая песня). |
| Автор: ivashkanet 14.8.2006, 17:14 |
Вот именно (кстати свойство --- это тот же метод, только синтаксис другой). Когда ты кидаешь на форму текстБокс. Ты получаешь новый класс -- твоя форма, а не отдельно класс и отдельно форму. И поэтому лучше обращаться ко всему классу. Хотя удобнее к его компоненту. Хорошо когда ты сам писал класс формы и знаешь его внутреннюю кухню. А если нет. Даже на простом примере (см. предыдущий пост) видно, что лучше такого не допускать. Но с другой стороны. Принципы ООП, ИМХО, жестко относятся только к повторно используемому коду. Если ты точно знаешь, что твоим классом никто не воспользуется (например кому нужна форма с конретным положением конкретных элементов на ней), то на ООП можно забить |
| Автор: kobra 14.8.2006, 22:40 | ||||
|
| Автор: 3me1 15.8.2006, 10:02 | ||
сорри |
| Автор: mr.DUDA 15.8.2006, 10:42 | ||
|
| Автор: Colloseum 2.9.2006, 19:35 | ||
При открытии понятно.
А наоборот.. При закрытии окна нужно передать данные(из textBox'a) в другую форму. |
| Автор: marcusmae 2.9.2006, 20:13 | ||||||||
Colloseum, классическое решение - то, что называется callback, обратный вызов, или делегат в C#. Можно, например, создать класс
Далее, в форме, которая должна получать текст из диалога, инициализировать слушателя события callbackEvent :
А в диалоге при его закрытии создавать событие :
Таким образом, при закрытии диалога произойдёт событие, аргумент которого - текст из TextBox'a. Другая форма зарегестрировалась на прослушку этого события, поэтому вызовется обработчик getText, в параметре которого и будет долгожданый текст. Показанная конструкция - наиболее общая : делегат и его тип находятся в отдельном классе. Конечно, всегда лучше, если они находятся в одном из использующих классов. Всё зависит от того, как ты хочешь организовать программу. |
| Автор: reloni 2.9.2006, 22:17 | ||||||
| Есть, на мой взгляд, более простое решение. Есть две формы: MainForm - главная форма, и Form1 - форма, из которой нужно вытащить данные. Кидаем на вторую форму текст-бокс и кнопку. Пишем своиство:
Обработчик нажатия на кнопку:
Ну и на главной форме кнопка, по нажатию на которую создается Form1:
Смотрим, что за DialogResult нам вернули, и если это ОК, то в мессаджбоксе видим то, что было введено в текстбокс в дочерней форме. |
| Автор: marcusmae 2.9.2006, 22:37 |
| Если уж на то пошло, DialogResult тут, по-моему, мало нужен. Достаточно будет создать public - поле/свойство с текстом в форме и отправлять туда текст при закрытии диалога. Думаю, ничто не мешает вообще переопределить в наследуемом классе DialogResult, сделать его string и возвращать текст. Да вот только, всё это будет работать только когда возвращать нужно туда же, откуда диалог вызвали... В любом случае, речь идёт о степени корявости кода программы, которую разработчики могут увеличивать до тех пор, пока программа не начнёт казаться интеллектуальной по части разнообразия возникающих ошибок. Общепринятый подход к созданию корявости - это, всё-таки, делегаты |
| Автор: reloni 2.9.2006, 22:43 |
| marcusmae, это если нужно выполнять какие-то действия если результ ОК, а другие, если он Cancel допустим. А про делегаты спасибо, не знал |
| Автор: reg24r 9.9.2006, 21:10 |
| Понять что в этом топике описано и повторить что здесь написано может только тот кто знает и без того как это все делать. Прочитал топик уже раз 50 в поисках истины. Попробовал что-то повторить. Увы... Уважаемые программисты ! Может кто-нибудь показать на примере как при закрытии кнопкой второй формы передать значение label.Text формы2 в label.Text формы1 Извиняюсь за тупость. (не отсылайте к теории и книгам, там о таком к сожалению ничего не написано, по крайней мере для тупых) |
| Автор: ivashkanet 9.9.2006, 22:49 | ||||||||
| reg24r, в твоем случае есть два варианта: 1) Показать вторую форму с помощью ShowDialog(), тогда первая форма будет ждать пока закроется вторая, а потом нужные данные "слизать" с закрытого, но еще живого экземпляра второй формы.
2) Либо
P.S. Модераторы: предлагаю очистить эту тему от всего ненужного мусора P.P.S. Весь код был написан тут же, так что его скорее всего придеться "доработать напильником" на предмет синтаксических ошибок |
| Автор: mr.DUDA 9.9.2006, 23:48 |
| ivashkanet, "мусор" останется, мало ли он кому понадобится |
| Автор: reg24r 10.9.2006, 16:37 | ||
| Оба примера слава богу работают. Огромное спасибо за помощь. Преодолена еще одна ступень в ООП. Вопрос по этому коду
Чем отличается Form1 parentForm; от Form1 parentForm = new Form1(); |
| Автор: Exception 10.9.2006, 17:40 |
| Первый вариант - ты объявляешь переменную. Второй - ты её объявляешь и сразу создаёшь экземпляр, с которым можно работать. В первом варианте в переменной будет хранится null, а во втором - экземпляр класса Form1. |
| Автор: ivashkanet 10.9.2006, 18:20 |
| Добавлю еще, что Form1 parentForm = new Form1(); создает совершенно новый экземпляр класса Form1 (читать выше про чертежи и здания). И это будет совсем другая новая форма (брат-близнец главной формы). Поэтому приходиться передавать ссылку на форму явно Form2 f2 = new Form2(this) |
| Автор: Lеstat 16.9.2006, 18:01 | ||||||
| Можно тоже вопросик на эту тему... прочитал и тему, и форум полистал не нашел ответа У меня есть главная форма Form1 и еще один класс в отдельном файле в классе Form1 пишу такую штуку
эта функция вызывается после нескольких других функций, в которых я подключался к БД, настраивал ее и тд эту функцию мне необходимо выззвать из другого класса... когда я пишу в другом классе
и у меня получается бред... мне нужно чтобы функция выполнилась так, как-будто я ее в самом же Form1 и вызвал! раньше я выкручивался через
Хочу вот узнать как умные люди пишут такие процедуры... |
| Автор: ivashkanet 16.9.2006, 22:20 | ||||
| Lеstat, надобыло внимательнее читать топик В твоем случае подходит пункт 2 (передача ссылки через конструктор)
Интересно почему так не покатило? Если ты хочешь из Form2 вызвать метод InstallintoDB первой формы, то пишешь
|
| Автор: vitovt 3.10.2006, 11:41 | ||||||||
| Немного вернусь к первонанальной теме. На форуме были только советы, как обратиться к форме-родителю (поправьте, если что-то пропустил). А что, если в проекте форм эдак 10-15 ? Я предлагаю следующий метод, который, возможно, будет легко понять: Итак, сначала сделаем static класс, в котором будем хранить список всех форм проекта. Примерно так:
Обратите внимание, что мы просто объявляем объекты, не выделяя память, т.е. по сути мы объявляем указатели на формы, которые в момент запуска равны null Сейчас внесём небольшие изменения в конструкторы каждой из форм, и вместо
напишем
И так для каждой. Иными словами, после создания формы мы из любой другой можем к ней обратиться: ApplicationFormList .AdminForm.Show(); Можно немного улучшить и проверять, создана ли форма, если вы не делаете этого при старте приложения:
Как видим, обращение к формам стало очень похоже на Delphi, только перед именем формы пишем имя того static - класса, в котором у нас храниться список форм. За сим дозвольте откланяться P.S. Буду только рад замечаниям. |
| Автор: ivashkanet 3.10.2006, 12:34 | ||||
А их вроде как и нету либо
А это лучше всего обернуть в пропертю:
|
| Автор: lioness 12.10.2006, 18:02 | ||
А если объект наследуется (у меня ArrayList, например), то у меня не получается так лихо напрямую к нему обратиться:
Т.е. у объекта формы должен стоять public? А protected - не пойдет? |
| Автор: mr.DUDA 12.10.2006, 18:18 | ||
protected пойдёт, если обращаемся к полю из наследника |
| Автор: xsb3 2.12.2006, 22:50 |
| Люди а http://xsb3.ifolder.ru/544137 данный проект переделать можете и выложить переделанный чтоб все на практике видели как что к чему. |
| Автор: ivashkanet 3.12.2006, 10:49 |
чтоб все на практике видели как что к чему. Чтобы ты его забрал результат, а больше ведь тебе ничего не надо Примеров, некоторые очень даже хороши, здесь было достаточно |
| Автор: VisualProgrammerNET 6.12.2006, 20:23 | ||||
| Достало просто уже писать диздок... Решил хоть чё-нить спрограммить. xsb3, вот те коды обеих форм. Форма 1:
Форма 2:
Да, и обработчик не забудь убрать с listView1_SelectedIndexChanged |
| Автор: Ламо 27.12.2006, 15:29 | ||
100%!!!! |
| Автор: ivashkanet 27.12.2006, 15:38 |
| Ламо, это ты к чему? Одноразовые способы у нас не в ходу А все потому, что в твоем коде frm это локальная переменная, которая пропадет при выходе из метода. Следовательно ссылка на форму пропадет тоже. А без ссылки на форму с ней уже ничего сделать не получиться |
| Автор: mr.DUDA 29.12.2006, 21:14 | ||
Ламо, ShowDialog работает до тех пор пока форма не закрыта. То есть, твой
выполнится уже после закрытия формы !!! |
| Автор: McSlash 8.1.2007, 00:54 | ||||||
| Описал формы как показал VisualProgrammerNET, но не могу придумать как добраться до текст бокса на второй форме. Сразу попробовал так
в результате ошибка (390): 'WinApp.Form2.textBox1' is inaccessible due to its protection level Перевести могу В смысле не к textBox'у а вообще к любому элементу?
На обеих формах стер все, что посчитал лишним. Может переусердствовал? |
| Автор: reloni 8.1.2007, 01:49 | ||||
| Это сообщение означает, что текстбокс на второй форме объявлен как protected или private, поэтому ты и не можешь но него добраться (инкапсуляция Или поставить текстбоксу public и тогда можно с ним делать все что душе угодно (в том числе и будет работать код выше). Или в форме номер два сделать специальное свойство:
И тогда можно будет устанавливать значение уже через него:
|
| Автор: McSlash 8.1.2007, 17:22 |
| Спасибо! А public - это, по моему, не серьезно. Не зря же private автоматом прописывается. Вроде как для защиты программы от внешнего управления в скомпилированной программе... Это только предположение естесвенно |
| Автор: Berserk 18.1.2007, 11:15 | ||||
Есть вторая форма на которой расположен прогрессбар. Есть бекгроундворкер. Для второй формы я создаю
Как мне вызывать его из первой формы в
|
| Автор: mr.DUDA 18.1.2007, 14:42 |
| Сделать его пабликом (в окне Properties в дизайнере), тогда если есть ссылка на форму, можно будет обратиться просто через точку. |
| Автор: Evgenik 27.2.2007, 05:58 |
| Профи С#.NET помогите реализовать простую задачу. Необходимо, чтоб при закрытии формы выдавалсь сообщении, подтверждающее выход. Тобишь сообщении с двумя кнопками (ОК,Cancel). Соответственно при нажатии ОК- выход, Cancel - всё возвратилось на круги своя... Извините если не туда запостил. |
| Автор: mr.DUDA 27.2.2007, 10:16 |
| Evgenik, вынеси в отдельную тему в раздел "Разработка Windows Forms", там и отвечу |
| Автор: ivashkanet 27.2.2007, 10:18 |
Не туда Сходи http://forum.vingrad.ru/index.php?showtopic=107933&hl=closing Что будет непонятно, там и отписывайся |
| Автор: Evgenik 28.2.2007, 05:52 |
| Спасибо, разобрался... P.S. Спасибо, что просто не послали восвояси |
| Автор: Legolas 23.4.2007, 09:46 |
| Скажите, плз. Как заставить при активация одной формы предыдущую закрываться? |
| Автор: ivashkanet 23.4.2007, 10:03 |
| Legolas, ИМХО, тут без внешнего менеджера форм не обойтись. |
| Автор: Legolas 23.4.2007, 10:20 |
| Поподробнее пожалуйста. |
| Автор: ivashkanet 23.4.2007, 10:39 | ||
Не, я глюканул
|
| Автор: Legolas 23.4.2007, 11:23 |
| Вроде работает, но... У меня есть главная форма, кликая по кнопке открывается следующая, затем мне нужно кликая по кнопке в следущей вернуться в главную. Но, в твоем примере, если кликнуть по кнопке во второй форме, то главная продублируется, а не выйдет на первый план, то есть получается, что появляются две главные формы одна под другой.... Как избежать этого? Добавлено через 14 минут и 48 секунд Всё, разобрался, спасибо!) |
| Автор: Legolas 30.5.2007, 18:49 | ||
Пытаюсь передать значение строки из одной формы в другую.
Компилятор выдает ошибку, что str == null; Ставлю breakpoint и вижу, что при работе в первой форме, значение fio="Фамилия", но при открытии второй формы это значение обнуляется (?) и str присваивается null. Подскажите как этого избежать. Спасибо. |
| Автор: Exception 31.5.2007, 13:19 |
| Полностью код покажи. Ты, наверное, создаёшь первую форму заново, а тебе надо считывать значение из уже существующего экземпляра |
| Автор: Legolas 31.5.2007, 20:30 | ||||
| У меня две формы: Form1 и Form2. В Form1 есть richtextbox1. Я заношу инфу в richtextbox1, а затем эту инфу мне нужно передать в Form2 строку. Form1:
Form2:
При breakpoints в первой форме видно, что string fio = "Иванов", но при Debug'е второй формы strinf fio == null (?) |
| Автор: Exception 31.5.2007, 20:40 |
| А ты в принципе осознаёшь то, что делаешь? заново создаёт экземпляр формы (можешь бедиться, вызвав f1.Show()). Естественно, fio пусто. Во-вторых, тебе нужно сохранить текст в поле, а ты сохраняешь его в переменной: (надо this.str) Правильно передать в конструкторе при создании Form2 ссылку на экземпляр Form1 и обращаться к нему. |
| Автор: Legolas 31.5.2007, 20:56 | ||
НЕ очень понимаю как это сделать... |
| Автор: Vasja_Pupkin 1.6.2007, 12:59 |
| Народ, такой вопрос по си шарпу: как обратиться к переменной из другого класса, т.е. мы имеем 2 формы на первой текст бох и кнопка, на второй текст бокс, при нажатии на кнопку на первой форме надо чтоб текст в текст боксе на 1 форме появлялся в текст боксе на 2 форме. |
| Автор: W1zArD 20.6.2007, 21:11 |
| >как обратиться к переменной из другого класса поставить перед переменной ключ. слово public |
| Автор: WinNet 15.7.2007, 11:28 | ||||
| К стати в mdi эти примеры не катят?! или я что то не так делаю... Вот код: Form3
Form1 // MDI контейнер!
|
| Автор: QryStaL 16.7.2007, 16:39 | ||
|
| Автор: WinNet 17.7.2007, 10:53 | ||
| СПАСИБО! Все заработало с малениькой поправочкой:
|
| Автор: ToMaloi 28.8.2007, 09:57 |
| Простите за повторения.Есть главная форма Form1.Считываем с нее textbox и открываем Form2, в Form2 обрабатываем textbox, а главную закрываем....закрывается и Form2??? Это в главной форме: Form2 f2 = new Form2(); f2.Show(); ...... Close(); Что же мне написать во второй чтобы она не закрылась и достать во второй textbox из главной Башкой подумал... все хорошо!!! |
| Автор: klet2007 10.9.2007, 08:36 |
| Имеются 2 формы. В них button1,button2 и textBox1,textBox2 соответственно. По клику на кнопку button1 рткрывается форма2. Как быть, если нужно чтоба текст из textBox2 второй формы попадал в открытую уже форму1? |
| Автор: ivashkanet 10.9.2007, 08:49 |
| klet2007, перечитай тему |
| Автор: Dark_Falcon 10.9.2007, 09:19 | ||||||||
В Form2 пишем
Обработчик нажатия на кнопку 2 в Form2
Обработчик нажатия на кнопку 1 в Form1
|
| Автор: Sergey_P 11.9.2007, 16:01 | ||||||||||
А как сделать, чтобы при нажатии кнопки во второй форме, данные передавались бы в первую, но при этом не закрывалась вторая форма? Я попробовал так:
но при компиляции в строке "public child(ParentForm link)" выдается ошибка Class, struct or integface method must have a return type Дальше я посмотрел пример
И изменил таким образом В форме 1 текст такой
а в форме 2 такой
Но при компиляции выдается ошибка parentForm.textBox1.Text = this.textBox1.Text; .... .Form1.textBox1.Text is inaccessible due to its protection level Добавлено через 6 минут и 51 секунду кстати, а если надо перемещать большой объем данных из потомка в родителя, как сделать, чтобы такая операция не тормозила? |
| Автор: ivashkanet 11.9.2007, 16:14 | ||||
Если это конструктор, то он должен называться ChildForm, а если нет, то должен быть тип (void например)
Перевод: .... .Form1.textBox1.Text недоступен ввиду его "уровня доступа" Пояснение: Скорее всего textBox1 имеет модификатор private. |
| Автор: Sergey_P 11.9.2007, 16:54 | ||||
| таак, понятно исправил на public у кнопки, заработало ...но вторая форма появляется вообще пустой вот код в первой форме (там в дизайнере добавил текстовое поле и кнопку)
на вторую форму тоже добавил кнопку 2, и текстовое поле 2
неделю назад программил на дельфи и в глаза не видел C#, а сейчас срочно надо C# !!!!! помогите Добавлено через 4 минуты и 34 секунды гыыыыы, понял я забыл InitializeComponent(); |
| Автор: Sergey_P 12.9.2007, 14:02 |
| к спецам есть еще вопрос - а можно родительской форме передать событие? если да, как это правильнее всего сделать? |
| Автор: Deja_Vu 28.9.2007, 15:21 | ||||||||
| Лично я думаю, что форма, этопржде всего инструмент ввода/ввывода информации, а саму информацию нужно хранить в другом месте. Поэтому использую родительский класс(свой - DataCenter), который и работает со всеми формами и т.д. DataCenter.cs
Program.cs
Form1.cs
AboutBox1.cs
Конечно, я не профи в C#.NET поэтому буду рад обсуждению такого подхода. Добавлено через 2 минуты и 20 секунд to Sergey_P имхо - мой подход может тебе очень помочь, т.к. с помощью него можно получать доступ к чему угодно... |
| Автор: ivashkanet 28.9.2007, 15:52 |
| Deja_Vu, нормуль ;-) Концепция хороша, реализация тоже неплоха. Я что-то в этом духе использую сам. P.S. Только вот это все сложно для тех, кто не знает как "Как обратиться к объекту другой формы".... |
| Автор: alver 20.11.2007, 19:23 |
| Хм, очень грустно конечно. Но перечитав топик 4 раза, так и не допонял, какой способ мне нужно использовать. Тут большинство пишут про возвращение значения из формы2 в форму1. А если просто надо передать значение из формы1 в форму2. Т.е. у меня есть форма1 с textBox и кнопка "Далее". При нажатии на кнопку "далее" форма1 закрывается(или скрывается), а значение textBoxa передаётся в форму2, где с ним(со значением) происходят необходимые вычисления. |
| Автор: ivashkanet 20.11.2007, 19:37 | ||||
|
| Автор: alver 20.11.2007, 20:45 |
| Всё, спасибо разобрался. А ещё такой вопрос. Т.к. первая форма у меня главная, то при открытии второй, ественно, закрыть первую форму я не могу, приходится её скрывать методом ".Hide()". А при закрытии второй, первая остаётся висеть в памяти. Как же мне при закрытии второй закрыть и первую? |
| Автор: ivashkanet 21.11.2007, 10:28 | ||||
Из наиболее простых решений я бы предложил следующее:
|
| Автор: alver 21.11.2007, 11:08 |
| Спасибо. Этот способ я понял. Но уж какой то он больно элементарный. Проти кончено за напористость). Просто хочу ПОНЯТЬ, как именно закрыть первую форму непосредтвенно из второй. Т.е. нужно видеть поля первой формы из второй. Прочитав топик, подозреваю, что нужно передать через конструктор втрой ссылку на первую?? И уже так с ней работать. Но чего то не выходит( |
| Автор: ivashkanet 21.11.2007, 11:30 | ||||
Не думаю, что это недостаток ;-)
Да, но раз у тебя есть метод инициалайз, то лучше через него (Я вообще сторонник того, чтобы конструктор делал как можно меньше --- только создавал нужный объект и все). А имея ссылку на первую форму можно делать с ней все что угодно, в частности закрыть ее:
Надеюсь первая форма не главная форма приложения? В этом случае ее нельзя закрыть не закрыв при этом приложения... |
| Автор: alver 21.11.2007, 11:41 |
| Щас объясню, собственно, в чём загвоздка. Представь себе любой пошаговый мастер, т.е. есть первая форма, нажимаешь на кнопку "далее", появляется вторая форма, и т.д. У меня таких формы подряд четыре. Первая информационная, вторая для ввода данных, третья для вывода формул, четвёртая для вычислений. Т.е. это и есть пошаговый мастер. Собственно хотелось бы, чтобы как в настоящим мастере можно было по кнопке "назад" откатываться на одну форму назад. Ну и передача значений между формами, в чём собственно ты мне уже помог. |
| Автор: 1stain 21.11.2007, 11:46 |
| alver, одна форма визарда, на ней несколько панелей, каждая для своего шага. В каждый момент Visible = true только та панель, которая соответствует текущему шагу. Вся информация аккумулируется в форме визарда. |
| Автор: ivashkanet 21.11.2007, 11:48 |
| В случае пошаговых менеджеров я бы предложил набор панелей (представляющих собой шаги), которые скрываются и показываются по мере надобности на одной и той же форме (это просто идея, я сам такого не делал, но если бы делал, то делал бы именно так). |
| Автор: alver 21.11.2007, 11:50 | ||
Я думал так, но как то некрасиво получилось. Элементов много, и всё в кучу. А как вообще правильно делать? |
| Автор: ivashkanet 21.11.2007, 11:57 | ||
Ну тогда вместо панелей можно использовать набор ЮзерКонтролов, тогда все элементы будут скрыты внутри контролов. А хз. Я никогда многостраничные диалоги не делал. |
| Автор: alver 21.11.2007, 12:07 | ||
Юзер контрол - а это чего? Точнее как?) |
| Автор: ivashkanet 21.11.2007, 12:13 |
| http://msdn.microsoft.com/library/rus/default.asp?url=/library/rus/cpref/html/frlrfsystemwindowsformscontainercontrolclasstopic.asp P.S. Погуглил немножко. Многие советуют делать многостраничный диалог именно панелями. |
| Автор: alver 21.11.2007, 12:22 |
| Хм, ладно. Спасибо, будем программить через одну форму) |
| Автор: ivashkanet 21.11.2007, 12:38 | ||
| alver, не нужно кидаться в омут с головой. Лучше сначала немножко подумать. У тебя уже есть вариант с четырьмя формами? Если да, то можно обойтись малой кровью создав небольшой класс который будет управлять формами диалога. Например что-то подобное:
P.S. Просьба модераторам вынести это обсуждение в отдельную тему. Название "Создание многостраничного диалога". Добавлено через 5 минут и 40 секунд Товарищ, кот отметил мой первый пост на странице минусом --- не хотите ли пояснить свою позицию? |
| Автор: alver 21.11.2007, 13:48 | ||
Да, четыре формы уже есть. Я в принципе уже и без класса сделал вроде, но время есть, поэтому щас попытаюь через класс ещё сделать, дабы чему то научиться) |
| Автор: QryStaL 21.11.2007, 15:06 |
| Я бы использовал для пошагового визарда TabControl со скрытыми закладками, тогда между ними просто перемещаться программно, и вся логика внутри одной формы. ivashkanet, посыпаю голову пеплом, просто случайно мышь съехала. Если бы знал как, удалил бы... |
| Автор: ivashkanet 21.11.2007, 17:25 | ||||
ИМХО, разница небольшая
Да фигня, это я так ;-) |
| Автор: alver 21.11.2007, 17:40 |
| QryStaL: пасиба, учту) Тока, чего то я не нашёл visible для вкладок. Там другое свойство за это отвечает? |
| Автор: VisualProgrammerNET 23.11.2007, 13:19 |
| Да, кстати с табами получается очень грамотный GUI. Согласен на все 100%. А чтобы скрыть вкладки я обычно сверху табконтрола поверх этих вкладок леплю label, в который можно например засунуть название текущего табпэйджа =)))) |
| Автор: QryStaL 23.11.2007, 13:40 |
| VisualProgrammerNET, я тоже так делал |
| Автор: AET 2.12.2007, 20:22 |
| подскажите как можн чтобы веденое слово в textBox1 из формы1 вышел в загаловке формы2 зарание блогодарен |
| Автор: thomas 2.12.2007, 23:07 |
| AET, присвой значению свойства text второй формы(Form2.Text) значение свойства text текстбокса(TextBox1.Text) первой формы. И будет тебе счастье. |
| Автор: AET 3.12.2007, 13:09 |
| чтото не получается |
| Автор: thomas 3.12.2007, 13:13 |
| AET, Код в студию. |
| Автор: AET 3.12.2007, 14:51 | ||
вот форма3
а вот форма 2 [code] public partial class Form2 : Form { public Form2() { InitializeComponent(); this.TopMost = true; } private void button1_Click(object sender, EventArgs e) { { Form3 f = new Form3(); f.Show(); this.Close(); } } private void button2_Click(object sender, EventArgs e) { Close(); } } [\code] |
| Автор: Real 5.12.2007, 15:10 | ||||||||
Чем отличаеться?
|
| Автор: mr.DUDA 19.12.2007, 16:07 |
| Real, ShowDialog отличается от Show тем что в первом случае форма показывается модально, т.е. блокирует другие формы приложения до тех пор пока эту форму не закроют. Остальные случаи - создание либо экземпляра своей формы (ExtendedParams) либо формы-"болванки" (Form), на которой ничего нет. |
| Автор: mr.DUDA 20.12.2007, 12:53 |
| Частично ответы по теме даны тут: http://forum.vingrad.ru/index.php?show_type=forum&showtopic=188004 |
| Автор: tht 23.12.2007, 11:12 | ||||||||
| отвечу сразу на первый вопрос темы. есть Form1.cs, у нее есть Form1.Designer.cs в этом файле в конце есть список компонентов и контролов которые вставлены в форму. типа так
если добавляете к проекту новую форму Form2, то у нее тоже есть Form2.Designer.cs в конце которой тоже есть список объявлений типа
что бы был доступ к переменным(контролам) второй формы(Form2) нужно в этой второй форме (Form2.Designer.cs)обьявить переменные след. образом
а из первой формы вызывать их след. образом: в форме Form1.cs допустим при нажатии на кнопку в этой форме
тоже самое ответил mr.DUDA только в сокращенном варианте. а я разъяснил более подробно. |
| Автор: kirillga 9.1.2008, 14:06 | ||||
| Помогите разобраться У меня есть например 1 форма Form1 в ней объявлена переменная
из неё вызываю Form2
Как теперь открыть Form1 не создовая новой форы тобишь чтобы все осталось как вводил во всех полях и передать в него значение prov???? можно конечно через Form1.Show(); но если форм 5 например то все значения таскать за собой надо будет. |
| Автор: mr.DUDA 9.1.2008, 14:12 |
совсем это не похоже на: |
| Автор: Real 9.1.2008, 22:21 | ||
2kirillga
|
| Автор: cASSAndra 21.1.2008, 13:45 | ||||
слушайте, тут делфисту без бутылки не обойтись
не помогает. пишет
что делать то? Хелп, плиз |
| Автор: Qhermit 30.3.2008, 23:25 |
| Помогите ! У меня такая проблема: в методе класса ImageProcClass.cs делаются преобзарования матрицы изображения ну эт неважно, мне нужно что бы из этого метода одна временая переменая записывалась на form1 в textbox1 как это сделать? |
| Автор: mr.DUDA 31.3.2008, 10:15 | ||||
Проще всего так:
У текстбокса в свойствах выставить "Modifiers = Public". |
| Автор: Qhermit 31.3.2008, 18:45 |
| mr.DUDA, спасибо большое |
| Автор: Qhermit 31.3.2008, 22:42 | ||||
| mr.DUDA, а не подскажешь как сделать что бы при открытии главной формы ISO (запуска программы) данные грузились в textBox-ы неактивной формы form2 вот код где пишется в textBox-ы главной формы ISO при загрузки
Пробывал писать вместо textBox1.Text = sr.ReadLine(); textBox1.Text = sr.ReadLine(); так
|
| Автор: mr.DUDA 1.4.2008, 10:49 | ||
Это создаст новую форму form2. Если хочется создать и показать новую форму, нужно после "new" вызвать form2.Show() |
| Автор: Qhermit 1.4.2008, 17:39 | ||||
мне нужно что бы в форму form2 из файла записывались значения в textbox-ы которые потом в других классах я использую а если так я делаю и потом просматриваю form2 то в ней значения которые я изначально выставил а не те которые в файле поэтому вот это ничего не делает или хз
|
| Автор: PaZ1T1V 9.4.2008, 13:57 | ||||||
Народ, я правильно пишу или нет ??? по4ему то ни4его не пашет (((
и
по4ему при нажатии кнопки зна4ения переменных меняются а в родительскую форму не передаются ?? поправил так, пришлось открыть richTextBox, все передается, то 4то мне надо дажже работает, но работает после того как я закрою форм2, мне етого не надо помогите плиз
|
| Автор: ProgrammingLife 12.4.2008, 21:33 | ||||
Всем Салют! Люди не мучайтесь делайте
ФОРМЕ 2
КОМУ ПОМОГ ? ПРИШЛИТЕ ПИСЬМА МНЕ ИНТЕРЕСНО Я СО СТАТИКОМ НЕ ПОЛЬЗОВАЛСЯ ОБЪЯСНИТЕ СКИНТЕ КОДИК С СОУЧАСТИЕМ КЛЮЧЕВОГО СЛОВА static |
| Автор: Solely 16.4.2008, 13:19 |
| mr.DUDA - thanks!! |
| Автор: ivashkanet 16.4.2008, 14:22 |
| ProgrammingLife, лучше научится правлиьно решать вопросы, а не просто решать. Если уж хочешь статик, то лучше использовать http://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%BD%D0%B3%D0%BB%D1%82%D0%BE%D0%BD_(%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F) |
| Автор: botusai 18.4.2008, 19:12 |
| 2 Paz1t1v Попробуй так: напиши на главной форме метод (DoWork), который делает то, что у тебя сейчас делает твоя кнопка findBtn на findForm, а на событии Click этой кнопки вызывай этот новый метод (form1.DoWork()) |
| Автор: ProgrammingLife 18.4.2008, 21:10 |
| |
| Автор: botusai 19.4.2008, 07:27 | ||
Вот код
|
| Автор: CheFF 10.5.2008, 22:52 |
| Тоже вопрос про доступ к форме и контролам. Делаю класс, который должен работать с контролами на форме. По началу, когда он работал с одним контролом, я решил просто передать этот контрол через параметр в конструкторе в класс и уже оттуда с ним работать. Все бы хорошо, да вот только потом пришлось еще один контрол добавить, а за ним еще один и еще... Может есть способ поэлегантнее? Пробовал добавить через конструктор форму... но в классе через форму не удалось выйти на контролы на ней... Как же работать из класса с контролами на форме? |
| Автор: -Mikle- 10.5.2008, 23:25 | ||
потому что контролы на форме private задай internal или public (в зидайнере форм) свойству Modifiers тех контролов, доступ к которым ты хочешь получить из-вне. А на счет "поэлегантнее" - разных подходов сотни. Все зависит от задачи. Лично мне вообще на приходится прибегать к таким способам, типа "доступ к контролам формы из какого-то класса". Может у тебя и уникальная задача, но уверен, что решить ее можно правильно. |
| Автор: CheFF 10.5.2008, 23:49 | ||||||
| -Mikle-, хм... это я пробовал, вот только не знаю, как работать то в классе. Создаю поле для указателя на форму:
Через конструктор его туда пихаю. Теперь, допустим, я могу сменить заголовок через
Насчет "элегантности" - пишу подобие броузера. На главной форме лежит таб контрол, в который я добавляю вместо TabPage вкладок, вкладки моего класса, наследованные от табпейджа, который содержит в себе компонент WebBrowser. Так вот, у этого броузера есть несколько событий, которые описываются в этом классе. Например, что бы он урл писал в заголовке, отображал процесс загрузки страницы в статус баре etc. Другого способа, как передавать через конструктор ему все эти контролы, а внутри уже менять их, я не нашел. |
| Автор: -Mikle- 11.5.2008, 17:03 | ||
А зачем ты: 1. вообще создаешь экземпляр вместо того, чтоб передавать this? 2. создаешь экземпляр базового класса для форм(в котором конечно же нет твоих контролов), вместо того чтоб создавать экземпляр твоей главной формы? На заметку: метод FindForm() контрола (в том числе табпейджа) возвращает ссылку на форму, в которой находится контрол. Элегантность: Один из принципов, которого надо придерживаться создавая архитектуру своего приложения, это разделение задач по иерархии. То есть каждый класс занимается своими задачами со своими данными(свойствами). Каждый класс имеет право (но не обязан) знать все о тех классах, которые он использует, но не должен ничего знать о классах которые используют его. Если класс Х хочет взаимодействовать с классами, которые его используют, то класс Х должен взаимодействовать на максимально абстракном уровне, без необходимости знать что-либо о классах, которые используют его. К счастью, для решения таких задач, в .NET есть механизм событий и делегаты. Итак, следуя этому принципу думаем: у нас есть форма, у формы есть ПрогресБар, ТабКонтрол и т.д., у ТабКонтрол есть ТабПейдж (ну или порожденный от него), а у ТабПейджа есть ВебБроузер. Таким образом форма стоит здесь в верху иерархии и это значит, что она имеет право знать обо всех классах, которые она использует, в том числе о твоем ТабПейдж и ВэбБроузер не нем. Мы не можем себе позволить того, чтобы что-либо самостоятельно меняло свойство класса, стоящего выше по иерархии, иначе был бы бардак: кнопка вдруг захотела поменять цвет фона у формы на красный, а ПрогрессБар - на синий, а сама форма при этом осталась бы в "шоке" от такого безобразия... Исходя из этих убеждений, приходим к некоторым решениям: 1) Первый, самый простой вариант - это предоставить ссылку на WebBrowser в твоем порожденном пэйдже. 2) Второй - объявить нужные тебе события и свойства в твоем порожденном пейдже. Форма должна сама подписываться на события броузера или пэйджа и отписываться от них когда выбирают другой пейдж. Также она сама должна устанавливать текст своего заголовка и менять значения СтатусБара и ПрогресБара, считывая значения свойств выбранного пейджа. Иначе будет неизбежна ситуация, когда два твоих открытых ТабПейджа начнут на перебив менять значения свойств того же, например, ПрогресБара, что не есть гуд во всех смыслах. Все, устал... |
| Автор: CheFF 11.5.2008, 19:09 |
| -Mikle-, хех... ты первый, "кому не пофиг", который реально что-то объяснил... остальные все шлют в ртфм =) Как у меня устроена программа - сложно объяснить на пальцах, я вот лучше кину ее код. Он ужасен, просто отвратителен, но все-таки я бы хотел сначала разобраться с тем, что есть, а потом уже переписывать по нормальному. Про правильную архитектуру: Саму концепцию правильного подхода я понял, вот только как ее реализовать не совсем понял, я такой человек, который без примеров очень сложно понимает. Можете подкинуть ссылочек по теме или подсказать, по каким темам искать? А то я в терминологии профан, потому и с поиском затруднения вечные =/ |
| Автор: -Mikle- 11.5.2008, 23:50 |
| Ну вот так, например, будет правильнее. Замечу что не идеально, но для понимания достаточно. Я подправил код и привел его в порядок. |
| Автор: CheFF 12.5.2008, 18:43 |
| Спасибо. Тут мне придется очень долго разбираться... Чувствую, что пока не перепишу - не вникну в саму суть, слишком много всего неопределенного. |
| Автор: ProgrammingLife 12.5.2008, 20:48 |
| Надо стремиться! все получится |
| Автор: CheFF 12.5.2008, 23:10 | ||
Чувствуется мне нужно еще тучу кода прелопатить и своего понаписать, что бы быть А практиковаться то особо и неначем. Все эти абстрактные задачи, вроде "переставить две переменные, без использования третьей" или "написать телефонную книгу с..." и тому подоное, очень угнетает :/ |
| Автор: -Mikle- 12.5.2008, 23:44 | ||
нет идей? продолжим: 1) написать подобие Vista Media Center 2) WinAmp с поддержкой сторонних скинов, плагинов, в том числе и визуальных 3) или хотя бы Tetris, у которого при помощи плагинов можно выбрать внешний вид, анимацию, правила перехода к новому уровню игры и вознаграждение за проход уровня, которое сможет быть почти любым последнее сам когда-то делал, давно уже... и не доделал до конца... терпения не хватило... |
| Автор: DnV 9.6.2008, 06:28 |
| По поводу темы обсуждения... Вообще говоря, для "дельфиста" ответ на самый первый пост темы (про аналог "uses ...") будет звучать как "partial class ..." Он просто смотрит на program.cs и думает, как из этого "модуля" увидеть другой |
| Автор: xStorm 17.6.2008, 23:18 |
| Учусь писать на C# в VS08. Просмотрел прошлые посты, помогли мне больше разобраться. У меня следующая проблема: Программа считывает данные с реестра, в зависимости от данных, программа на этапе старта должна немного изменить "чертежи" форм, а доступ к ним я получить никак не могу. Как мне например с MainForm изменить данные "чертежа" других форм. через класс я так понял можно обращаться, но нужно задать тип static у класа той формы, данные на которой я хочу изменить. Но что-то оно не работает у меня. Сразу начинает ругаться на кучу других вещей внутри класса, типо везде static ставить надо, везде ставишь не работает тоже. Помогите, как получить доступ к элементам "чертежей" всех моих других форм. Может вопрос такой и рассматривался, но видимо его изложение мне не было понятно, спасибо |
| Автор: ProgrammingLife 21.6.2008, 17:55 |
| Здарово ! xStorm ты работаешь над чертежами под компас что ли пишешь ??? Я НЕ СТАЛКИВАЛСЯ С ПРОБЛЕМОЙ С ЭТОЙ НО СОВЕТАЮ ТЕБЕ НАПИСАТЬ КОДИК ДА КТО НИ БУДЬ ОКЛИНКИТСЯ! |
| Автор: xStorm 27.6.2008, 01:39 | ||
| Ну коли не сталкивался, зачем писать-то Термин "чертежи" до этого употребляли в теме. Это, насколько я знаю, Те формы которые ещё не были созданы программой в процессе её выполнения, но хранятся в ней. Любая форма которую делаешь в редакторе является "чертежом" на основе которого строится форма при необходимости её показа.
Вот пример создания формы по четрежу. Какой-то другой ког писать не вижу смысла, так как мне нужно знать не только в конкретном случае, но и во всех остальных я тоже должен понимать все это дело. Вопрос остался преждний Как мне с, допустим, начальной формы программы, обращаться и редактировать "чертежи" всех других форм? |
| Автор: ivashkanet 27.6.2008, 10:40 | ||||
Так, чертеж это код и только он. Изменять его можно только во время написания кода. Т.е. до компиляции. MainForm это имя чертежа. С помощью этого имени можно создать новый объект по этому чертежу. Кроме того, есть набор данных и методов относящихся к чертежу, а значит ко всем экземплярам созданным по этому чертежу. Этот набор общих данных и методов помечается словом static. Поэтому сразу нужно приучить себя не обращаться к чертежу (классу) когда нам нужен конкретный экземпляр. Если нам нужно обратиться к конкретной форме ты должен иметь ссылку на нее и обращаться через нее (как эту ссылку передавать говорилось не раз в этой теме). Единственное исключение -- это http://ru.wikipedia.org/wiki/%D0%9E%D0%B4%D0%B8%D0%BD%D0%BE%D1%87%D0%BA%D0%B0_(%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F). Суть такая: есть только один экземпляр созданный по чертежу, так как он один, то его можно вывести в "данные чертежа". Получиться что-то типа:
|
| Автор: PashaPash 28.6.2008, 17:01 | ||
xStorm, "чертеж формы", который ты создаешь в дизайнере, превращается в последовательность строк в функции InitializeComponent. Отредактировать "на лету" код без хорошего знания языка не получится. Подойди к проблеме с другой стороны. Из главной формы уже после создания дочерней "по чертежу" описывай как именно та должна быть отображена. Вот твой же пример:
З.Ы. Предлагаю запретить слово "чертеж" как неоднозначное и вводящее в заблуждение. ivashkanet, за такой синглтон надо расстреливать :( |
| Автор: Exai1e 5.7.2008, 19:51 | ||||||
| Все по томуже вопросу, прочитал, прочитал но чтото не оч понял. К примеру есть проект (1 форма + 1 доп. класс) как можно в дополнительном классе написать напримерно вот так ?:
вот коды ост юнитов:
воть... спасибо. Знаю что вопрос заезженный, но всеже. |
| Автор: wotker 5.7.2008, 20:18 | ||
А так и нельзя писать |
| Автор: Exai1e 5.7.2008, 20:46 | ||
| wotker, я понимаю что тут так нельзя, но как сделать так чтобы можно было в дополнительном модуле обращаться к элементам формы ? например в Delphi можно написать так:
|
| Автор: wotker 5.7.2008, 20:53 | ||||
есть класс
есть экземпляр - form1_. обращаться к полю richTextBox1 можно только при помощи экземпляра (т.к. не помечено как static). Также richTextBox1 должно быть помечено атрибутом public если эти 2 условия выполняются - пишешь:
|
| Автор: Exai1e 5.7.2008, 21:27 |
| wotker, Если обращаться в том же модуле где и описание класса, то все нормально. А если создать новый класс, и попробывать достучаться до формы, то нечего не получается. |
| Автор: wotker 5.7.2008, 21:31 |
| Что ты понимаешь под модулем? В .net-е это сборка в которой компилируется класс. Приведи пример где неработает. |
| Автор: Exai1e 5.7.2008, 21:35 |
| модуль - новый фаил класса (когда нажимаеш на проект правой кн мыши, add - class), вот если из него обращатся к форме Form1.RichEdti1.Text... то это не работает. |
| Автор: wotker 5.7.2008, 21:41 | ||
при этом не важно в каких файлах определены классы |
| Автор: Exai1e 5.7.2008, 21:42 | ||||||
например вот
Добавлено через 2 минуты и 49 секунд wotker, все вроде понял, спасибо. |
| Автор: wotker 5.7.2008, 21:53 |
| Так не пойдет. Если у тебя статическое (т-е класса) св-во/поле, то да. В данном случае ты хочешь получить доступ к полю экзампляра класса. |
| Автор: Jade 27.8.2008, 15:52 | ||||
| приветствую. вопрос скорее всего неновый, но ответы на похожие или аналогичные совершенно непонятны для меня. есть форма. на форме есть панель. на панели пикчербокс. есть класс "картинка". в нем сама картинка типа bitmap, куча ее параметров и функций для работы с ними. есть опен_файл_диалог, который открывает картинки. у него на file_ok прописано создание объекта класса "картинка".
в конструкторе класса "картинка" мне необходимо в пикчербоксе (тот который на панеле формы) отобразить мой битмап. --- я сделал в классе формы функцию
но ее вызвать в конструкторе класса "картинка" нельзя. расскажите пожалуйста как мне нужно поступить. заранее спасибо. |
| Автор: Moid 23.10.2008, 12:29 | ||||||
| Проблема следующая: Есть форма, на разных табах которой лежит 2 UserControl'а. Нужно при переходе на 2-ю вкладку заполнить данными конторолы этой вкладки. Сделать это нужно так, чтобы небыло завязанности на форму. Решил сделать так: Вызываю при переходе на квладку метод из класса Presenter'a метод, в который передаю свой "объект":
В результате контролы пустые... Значения в них почемуто не зхаписываются, почему? |
| Автор: Partizan 23.10.2008, 12:37 | ||
Moid,
Создавать новый объект наверно не стоит. Надо просто найти объект на вкладке и вызвать у него FillValues |
| Автор: Moid 23.10.2008, 13:19 |
| Partizan, каким образом его можно найти? Можно пример. |
| Автор: Partizan 23.10.2008, 13:41 |
| Moid, пробежаться по коллекции дочерних контролов на вкладке TabPage.Controls |
| Автор: Moid 23.10.2008, 14:20 | ||||
| Проблему решил так: Передаю с формы ссылку на сонтрол:
В презентере:
|
| Автор: v_enom 9.11.2008, 01:03 | ||||
| я решил вот как: требовалось: из формы MainForm вызвать форму ConnectForm через кнопку "Connect" в меню, а потом из формы ConnectForm сделать видимой еще одну кнопку "File" меню в MainFrom (ранее была невидема) делаем так: в файле главной формы mainForm (в которй потом будем что-то изменять из 2ой формы ConnectForm. Я делал Enabled кнопку "File" в menuStrip) делаем открытый метод public void FileToolStripEnabledChange(bool val) и "финт ушами" ввиде передачи во 2ую форму this (объекта первой формы mainForm)
а во второй форме, которая будет что-то менять по нажатию кнопки делаем следующее:
по-другому у меня не получилось. просто сделать public - все равно выдает ошибку доступа. Добавлено @ 01:10 P.S. Для тех, кто переходит с Delphi или, как я, с Builder - реально непонятно и неинтуитивно. |
| Автор: Rififi 9.11.2008, 13:18 | ||||
| v_enom, делай взаимодействие между формами через эвенты
В форме ConnectForm
|
| Автор: DarkASU 16.11.2008, 10:50 |
| А такой вопросик в дочерней форме есть строка коннекта к серверу как передать в основную что коннект прошел успешно. И работать далее из основной формы под зарегистрированым юзером. |
| Автор: EgoBrain 17.11.2008, 10:25 | ||||
|
| Автор: thomas 23.1.2009, 18:25 |
| Привет всем. Перечитал всю тему и ответа на нужный вопрос не нашел. Имеем MDIконтейнер(главная) и ряд дочерних форм. Дочерние формы вызываются нажатием на кнопки или пункты меню в главной форме. Для того что бы избежать повторного открытия уже открытого дочернего окна выставляю свойство кнопок или меню Enable = false. Открылось дочернее окно и кнопочка болше не доступна. Все вроде розово и пушисто. Да у нужных кнопок и пунктов меню свойство modofiers выставлено в public. Но проблема в том что в событии FormClosed для дочерней формы я не могу обратиться к контролам главной формы, а только к свойствам и методам самой формы. И как решить данную задачу? ЗЫ там на первых страницах предлагаеться передавать ссылку на главную форму в конструктор дочерней, но и в этом случае до контролов главной формы не добраться. |
| Автор: Drabuna 23.1.2009, 18:52 | ||||
| МСДН помог. В parent форме:
В child форме:
|
| Автор: thomas 23.1.2009, 21:11 |
| Привет всем еще раз. Решение вопроса (не создавать много эекземпляров дочернего окна в MDI) подсмотрел на http://www.codeproject.com/KB/architecture/singletonforms.aspx |
| Автор: BestRoot 17.3.2009, 17:54 |
| Привет всем Есть задача обратится из одного приложения в другое как это сделать ? PS мне говорили что надо через Дискрипторы но я понятия не имею как ими пользоватся |
| Автор: Partizan 17.3.2009, 18:25 |
| BestRoot, приложения левые или свои собственные? |
| Автор: BestRoot 17.3.2009, 18:29 | ||
свои собственные |
| Автор: Incvizitor 20.3.2009, 17:14 | ||||||
| Приветствую всех! Подскажите, как реализовать работу с основной формой из класса. Я работаю обычно так:
И сам класс:
Так все работает как нужно, но столкнулся с проблемой, когда пришлось в классе описывать такое:
Все что написано прочитал, но, увы, ничего не подошло, либо не понятно как использовать. Если кто может, напишите подробный пример. Заранее спасибо! |
| Автор: KelTron 2.4.2009, 05:36 |
| Incvizitor, напиши, что конкретно тебе нужно реализовать (как ты собираешься работать с прогресс баром), тогда уже можно будет написать конкретный пример кода. А вообще по BackgroundWorker смотри http://wladm.narod.ru/C_Sharp/backgroundwork.html |
| Автор: dekroll 23.5.2009, 21:31 | ||||
| Привет всем! Совсем недавно начал писать на Visual C++ и возникла такая же проблема. Не могу обратиться из дочерней формы на родительскую. При попытке добавить на Form2 строку
компилятор на Form1 начинает ругаться на вызов второй формы
Подскажите, пожалуйста, в чем проблема и, если можно, приведите исходник. Заранее благодарен. |
| Автор: TiMeTraSheR 7.6.2009, 16:16 | ||||||||||||
| Прочитав весь топик, вычерпал некоторые полезные советы, но проблему так и не решил =( Визуально программа выглядит так: http://img2.pict.com/d0/35/19/559d9fa8238150bcea2751deed/06KzY/yrn1wzjpg.jpg В Program.cs создается экземпляр DataCenter, потом вызывается. В DataCenter.cs создается и вызывается экземпляр MainForm, а так же создаются экземпляры TelnetClient, Configuration и ServerManager в кол-ве одной штуки. По задумке, все вычисления должны проводиться в DataCenter, а из MainForm должны вызываться методы из созданых в DataCenter экземпляров, ну и в самой MainForm должны выводиться некоторые переменные, хранящиеся в этих экземплярах. Обращаться из MainForm в сам DataCenter и имеющиеся в нем экземпляры получается, используя следующий код
А вот как это использовать с классами я не знаю, ибо во-первых писать в каждом методе "(DataCenter p)" не удобно, а во-вторых компилятор орет на "(this)", типо его нельзя исппользовать в этом контексте. Обращаться из TelnetClient, Config и т.д. к MainForm не получается =( Да и друг к другу собственно тоже. Вот примеры:
При таком раскладе программа компилится нормально, но когда вызываешь из метод из MainForm, то происходит вылет с ошибкой "...В экземпляре объекта не задана ссылка на объект..." Дебагер указывает строчку "dc.tc.Set(dc.conf.ls_host, dc.conf.ls_port, 10);", которая в ServerManager. Предварительно спасибо на ответы ^^ ПС: прочитал свой пост, какой-то он не очень читаемый, т.к. много я его редактировал и вышла полная белеберда, но думаю общий смысл ясен. UPDATED: хм, кажется я понял свою ошибку. Я пытался обратиться не к экземпляру DataCenter, а к классу(чертежу). А как тогда обратиться к экземпляру, если он cоздан в Program? UPDATED: Проблема решена. |
| Автор: Miktor 1.8.2009, 21:56 | ||||||
| Здравствуйте,у меня проблема. Есть главная форма Form1. В ней есть кнопка:
Открывается новая форма с 4 полями для ввода(в них уже стоят значения переданные в массиве) и 1 кнопкой,при нажатие на которую
должны передаваться в основную форму некие данные введенные в текстбоксы но VS говорит :
Подскажите что я делаю нетак. |
| Автор: Enteropoly 1.8.2009, 23:51 |
| Изучай модификаторы доступа http://msdn.microsoft.com/ru-ru/library/ms173121.aspx |
| Автор: IAmHell 19.10.2009, 22:30 | ||
| Здравствуйте. Имеется 2 формы : Form1 - родительская, Form2 - дочерняя Требуется чтобы объект класса Form2 был виден всем ункциям класса Form1 и была возможность передать в конструктор Form2 указатель на объект класса Form1, т.е. на родительскую форму Сейчас это выглядит так:
Так форма F видна из всех функциий класса Form1 (если убрать из списка параметров this), но компилятор ругается на this в качестве параметра при создании объекта класса Form2: error CS0027: Keyword 'this' is not available in the current context В конструкторе Form2 всё прописано как положено и он тут не при чём Где (или как?) нужно объявить экземпляр класса Form2 чтобы он был виден из всех функций класса Form1 и можно было передать ему указатель на родительскую форму? |
| Автор: Partizan 21.10.2009, 11:35 |
| IAmHell, перенесите создание объекта в конструктор. |
| Автор: IAmHell 22.10.2009, 09:13 | ||
Partizan, вы имеете в виду так?
Пробовал и так. Тогда форма F не доступна для функций Func1() и Func2() |
| Автор: mrbrooks 22.10.2009, 10:16 | ||
Думаю нет.
Другое дело не понятно зачем нужна ссылка на родительский класс в конструкторе дочернего (при условии что конструктор дочерней формы перегружен). Чем вызван такой изврат? |
| Автор: IAmHell 22.10.2009, 16:16 |
| Всё затевалось для того чтобы из Form2 можно было обращаться к контролам и функциям, расположенным на Form1 и наоборот. Прочитав топик, я сделал вывод что такой вариант наиболее корректный с точки зрения ООП. Если есть другие варианты добиться такой функциональности, с удовольствием ознакомлюсь |
| Автор: mrbrooks 22.10.2009, 16:28 | ||
это да. правда из недостатков такого подхода стоит отметить не возможность использования конструктора по умолчанию. если это не критично - то все гуд. Инкапсуляция, как говорится наше все. Я к примеру использую собственные события в дочерних формах, которые обрабатываю в главной. |
| Автор: LifeOfWorld 13.11.2009, 19:33 |
| Вопрос по WPF. Перенаправили сюда =) Допустим есть 2 xaml файла (file1.xaml, file2.xaml) В file1.xaml объявляется элемент ComboBox: <ComboBox x:Name="cb" Grid.Column="1" VerticalAlignment="Center" Width="50" Height="25" FontSize="15"/> В file2.xaml.cs должен использоватся код вроде этого: ... cb.Items.Add(i + 1); // Filling ComboBox ... Но file2.xaml не знает что такое "cb" Вопрос: Как правильно обратиться к cb в file2.xaml.cs? Решения вроде обратиться из любого места file2.xaml.cs не подходят. Form frmMain = Application.OpenForms["frmMain"]; Button btn1 = (Button)frmMain.Controls["button1"]; [http://forum.codenet.ru/showthread.php?t=37091] |
| Автор: Partizan 14.11.2009, 02:06 |
| LifeOfWorld, что-то мне подсказывает, что для решения Вашей задачи, Вы избрали неверный подход... что Вы хотите получить от такого взаимодействия? |
| Автор: maxfox 6.4.2010, 18:39 | ||||||
| Товарищи! Помогите, пожалуйста, по указанной теме! Есть две формы: основная и дочерняя. Основная - это та, что создаётся по умолчанию:
- на форме есть вьюпорт. При вызове метода ReDrawWin - вьюпорт перересовывается. Так же на форме есть кнопка. При нажатии на ней открывается вторая форма:
-На второй форме расположены некие объекты управления(ввод данных) Мне необходимо, чтобы действии на второй форме - при работе с объектами управления, обновлялся вьюпорт основной формы. То есть, по сути, нужно вызвать метод ReDrawWin. Как это сделать? Я пытаюсь, как это описывали выше, передать ссылку главной формы, во вторую форму, через конструктор второй формы:
- однако компилятор видит ошибку в записи: Form1^ MainForm - и пишет error C2061: синтаксическая ошибка: идентификатор "Form1". Не могу понять, в чём дело. Ведь Form1 - это имя класса, а не переменная, т.е. вроде должно быть всё нормально..... Подскажите плиз - как правильно сделать!! |
| Автор: maxfox 7.4.2010, 15:19 |
| Вроде бы я нашёл решение. воспользовавшись классом Delegate - при помощи него я создал ссылку на нужный метод в основной форме, и передал эту ссылку во вторую форму. Теперь я могу использовать эту ссылку, где угодно во второй форме. |
| Автор: GX777 15.4.2010, 18:35 | ||||
| прочитал данную тему... Итак у меня есть 2 формы: MainForm и Form1. у MainForm есть баттон1 и текстбокс 1. У Form1 есть только кнопка. мне нужно из формы Form1 изменить текстбокс1 у MainForm при нажатии на кнопку. Пишу на Form1:
обработчик события на кнопку в главной форме (MainForm):
но после всех манипуляций я могу изменять только текст шапки у MainForm. textbox1.text я по прежнему не могу менять. Что я делаю не так? |
| Автор: A5uKa 16.4.2010, 16:04 | ||||
А что вы вообще пытались сделать ? там в начале топика есть примеры , а тут была особая задумка я полагаю ?.. |
| Автор: GX777 16.4.2010, 20:22 |
| мне вообще всего лишь нужно из form1 изменить текст в текстбоксе на Mainform. Здесь гдето читал что так(написано выше) можно это сделать но у меня не работает.Никак не могу толком понять как правильно обращаться к обьекту другой формы |
| Автор: A5uKa 16.4.2010, 22:43 | ||
По нажатию кнопки делаешь Mainform.textBox1.Text="ля-ля-ля"; Другое дело что такое Mainform. Обычно когда создаётся проект MainForm у тебя уже есть ... ведь так ? у меня в данный момент нету под рукой студии, но помойму она создаётся как-то так Application.Run(MainForm()); можно конечно вытаскивать её и отсюда через Application.Forms или что-то такое, но лучше обозвать MyForm = new MainForm(); Application.Run(MyForm); соответственно у MyForm правильная видимость и доступность должна быть. Ну может ещё как |
| Автор: GX777 20.4.2010, 13:50 | ||||
с консолью и у меня проблем не было.
не катит у текстбокса модификатор private, я конечно могу поставить на public... а MainForm эьто просто я так обозвал первыую форму,а Form1 вторую. в общем у меня вот такая фигня: |
| Автор: GX777 20.4.2010, 13:52 |
| плин,забыл поменять имя файла(((прошу не банить я случайно |
| Автор: surfrider 11.8.2010, 12:15 | ||
| Как сделать сабж на C++/CLI? Нашел похожую тему http://forum.vingrad.ru/topic-199937.html , но его вариант меня совсем не устраивает. В общем, есть главная форма Form1 и дочерняя форма, пусть Form2. В классе главной (form1.h) есть такие строки:
Задача, как и везде: обратиться к определенным переменным или объектам главной формы(form1) из дочерней формы (form2). Я пытался решить, как тут описывали: передача указателя на родительскую форму в дочернюю (Form2 ^childWindow = gcnew Form2(this)). Но проблема: в дочерней форме в таком случае не определен класс Form1 и как его определить, я не знаю. Ведь если в файле form2.h написать #include "Form1.h", то вылезет миллион ошибок. Какие есть варианты, кроме того, чтобы создавать отдельный класс, реализующий это? |
| Автор: KelTron 11.8.2010, 13:07 | ||||||
| Как вариант, но думаю запарит вручную выдирать обработчики из хедера и переность в цпп. Form1.h
Form2.h
Form2.cpp
|
| Автор: surfrider 11.8.2010, 17:27 |
| KelTron, спасибо, довольно хитро, но есть ли еще какие-нибудь варианты? |
| Автор: Georgich 4.11.2010, 19:39 | ||
| Приветствую. А я все никак не могу понять, как обратиться из второй формы к dataGridView1 на первой. Мне необходимо по нажатию на кнопке на второй форме добавить данные из textBox и comboBox в dataGridView1 на первой форме. Вторую форму я вызываю так:
Собственно, а что надо сделать во второй форме? Спасибо. |
| Автор: lukan2 13.12.2010, 23:55 | ||||
| surfrider Как вариант: имеется две формы Form1 и Form2. На первой поле textBox1 и одна кнопка. В поле textBox1 вписываем строку и по нажатии кнопки открывается вторая форма, где имеется только одно поле textBox1, в котором и появляется текст из textBox1 первой формы. Для всего этого необходимо во второй форме (файл Form2.h) изменить конструктор следующим образом для передачи в него данных:
Далее в файле Form1.h , там где необходимо, написать следующие строки кода:
Так можно передать любой тип данных, но только из более ранней формы в более позднюю. Нужно лишь немного тогда изменить конструктор! |
| Автор: Nikosss 3.2.2011, 17:16 | ||
| Здравствуйте, есть форма Form1, на ней несколько Label'ов. При нажатии курсором на один из Label'ов появляется форма frmPopUp. На этой форме есть Label, текст которого при нажатии на него, нужно вставить в текст Label'a, который вызвал форму frmPopUp. Обработчики событий:
Я не знаю как обратиться к Label'у, который вызывает форму frmPopUp и передать ему текст с Label'a, нажатого на форме frmPopUp |
| Автор: Nikosss 3.2.2011, 17:33 | ||
| Здравствуйте, есть форма Form1, на ней несколько Label'ов. При нажатии курсором на один из Label'ов появляется форма frmPopUp. На этой форме есть Label, текст которого при нажатии на него, нужно вставить в текст Label'a, который вызвал форму frmPopUp. Обработчики событий:
Я не знаю как обратиться к Label'у, который вызывает форму frmPopUp и передать ему текст с Label'a, нажатого на форме frmPopUp |
| Автор: LRC 2.3.2011, 12:35 | ||
Вот решение public partial class frmPopUp : Form { private static Label l=new Label(); public frmPopUp() { InitializeComponent(); } private void label1_Click(object sender, EventArgs e) { l.Text = label1.Text; } public static Label GetSetLabel { get { return l; } set { l = value; } } } public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void label1_Click(object sender, EventArgs e) { frmPopUp f = new frmPopUp(); frmPopUp.GetSetLabel = (Label)label1; f.Show(); } } |
| Автор: ASkripko 30.3.2011, 18:42 |
| Люди добрые) помогите, чем сможете) а то, честно признаюсь, уже задолбался и все перепробовал Дело такое. Есть форма - контейнер, в ней еще 2 формы: в 1-ой производится расчет и построение графиков, во 2-ой нужно в гридбокс вывести данные. Проблема в том, что переменные 1-ой формы не видны из 2-ой, хотя они паблик, более того, если прописывать методы на вывод этих данных (просто банально return) они тоже ничего не выводят. Обращаюсь так: Form1 F1 = new Form1(); int a = F1.data, где data public переменная В результате ничего - все переменные видны (в меню интелленсе при написании F1. ) но получить получается только те переменные, которые объявлены в инициализации самой формы. Буду оч признателен, если поможете |
| Автор: Vezd 21.6.2011, 10:56 | ||||
Я создал UserControl1.cs. Но возникли некоторые проблемы с передачей значений из Form1 в UserControl1:
И код в UserControl:
При использовании метода button1_Click() и нажатии на кнопку результат получается правильный .А при использовании метода Am()(если кнопку не нажимать) никакого результата не получается. В чем здесь проблема и как это исправить? |
| Автор: Hajime 5.10.2011, 09:13 |
| Доброго времени суток уважаемые про! Прочитал всю тему ,но столкнулся с проблемой... Суть проблемы : Имеется UserControl1 , UserControl2 , Form1 на UserControl1 размещены TextBox1и Button1 , на UserControl2 тоже TextBox1и Button1 . UserControl2 помещена на Form1. По Button1 на UserControl1 вызывается форма с UserControl2. Как передать значения с TextBox1 на UserControl2 в TextBox1 на UserControl1 , если на UserControl2 пользователь обязан нажать на кнопку? Заранее благодарен! |
| Автор: Allen 12.1.2012, 22:45 |
| Здравствуйте! Очень нужна помощь. у меня есть форма на ней 1 кнопка и текст бокс. как мне передать значение из текст бокса на кнопку. т.е чтобы после ввода в текст бокс текста этот текст передавался на кнопку? Заранее спасибо |
| Автор: ayala80 22.1.2012, 02:03 |
| можно и http://www.pantaray.com/highlights_russian.html.... |
| Автор: GOSTT 21.5.2012, 11:30 | ||
| Здравствуйте, я пишу универсальную функцию для настройки свойств различных элементов управления и столкнулся со следующими проблемами: 1. невозможность обратиться к свойствам передаваемого элемента управления через класс Object 2. проблему выше решил использованием временной переменой, но так можно настроить только классы, методы все равно недоступны 3. я не знаю можно ли передать в функцию неопределенное количество (без жесткого указания) элементов Код:
В функцию передаются: 1. элемент управления WindowsForms (button, textbox, ...) 2. экземпляр структуры st_params (набор int`ов, обрабатываемый pbStatAnalize и возвращающий соответствующее значение в свойство элемента) 3. e_stat - enum структура для большей наглядности кода Хотелось бы убрать switch - привязку к типу (напрямую обращаться к свойствам элемента, вызывать методы), передавать в функцию набор разных элементов и их настроек, в общем, сделать функцию действительно универсальной |
| Автор: EgoBrain 10.6.2013, 03:27 | ||||
ArrayList в помощь
Передавай тип базового класса, от которого наследуются элементы, например, Control и дальше пошло поехало (преобразование типа, вызов базовых методов). Но если обращаешься к перегруженным или новым атрибутам/методам, то без проверки типа всё равно не обойтись. |
| Автор: ZyevArtem 7.4.2017, 11:47 | ||||||||||||
Спасибо за инфу) с токой же проблемой столкнулся |
| Автор: semashuk 5.1.2019, 19:45 |
| Это интересно |