![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
crang |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 3.6.2004 Где: Ukraine Репутация: нет Всего: нет |
Есть проект из двух форм, в первой определяются переменные для использования во второй . Пробовал объявить в первой форме, после объявления класса формы
и без "public" и с инициализацией и без:
и вот из другой формы никак не могу найти эти someVar'ы ![]() пытался обратиться напрямую по имени - говорит нет такого объекта в данном нэймспейсе, пробовал как к объекту главной формы - и там нету такого объекта ![]()
подскажите плз - как должно быть? Это сообщение отредактировал(а) crang - 2.6.2005, 16:38 |
||||||
|
|||||||
redrick |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 547 Регистрация: 7.1.2004 Где: Москва Репутация: нет Всего: 5 |
какие ошибки валятся ? сам объект создается ?
-------------------- Имею Мнение Хрен Оспоришь |
|||
|
||||
crang |
|
||||
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 3.6.2004 Где: Ukraine Репутация: нет Всего: нет |
Если в первой форме написать
а во второй
то пишет : The name 'klbhost' does not exist in the class or namespace 'clbftp_daemon.Tunes' |
||||
|
|||||
simanyay |
|
|||
![]() Антон Ковалёв ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2053 Регистрация: 22.8.2002 Репутация: нет Всего: 36 |
Ну дык ты же переменные класса создаешь в классе MainForm, а в методе button1_Click(...) класса Tunes ты пытаешься вызвать их, как если бы они были объявлены внутри класса Tunes. Это всё относилось ко второму примеру, поскольку первый я не очень понял
![]() -------------------- «It's better to be a pirate than to join the Navy» — Steve Jobs. |
|||
|
||||
crang |
|
|||
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 3.6.2004 Где: Ukraine Репутация: нет Всего: нет |
simanyay
так об этом я и спрашиваю - а где их тогда объявлять чтоб было видно отовсюду? |
|||
|
||||
simanyay |
|
||||
![]() Антон Ковалёв ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2053 Регистрация: 22.8.2002 Репутация: нет Всего: 36 |
А вообще лучше тебе создать свойства для public переменных. ИМХО, все переменные должны быть закрыты, а доступ к ним должен быть только из методов или свойств.
А вот глобальных переменных в C#, насколько я знаю, нет. Что и правильно. Ещё почитай вот это: Access Modifiers -------------------- «It's better to be a pirate than to join the Navy» — Steve Jobs. |
||||
|
|||||
Kurt |
|
||||||||||
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: 20 Всего: 36 |
Думаю, это не будет работать. Этим кодом ты во второй форме создаешь ДРУГОЙ объект класса MainForm, к-й будет иметь СВОИ значения соотв. полей. Как я понимаю, задача сводится к следующему: есть две формы. Form1 вызывает Form2. Причем в Form2 нужно получить значение некоторого поля из Form1. Я бы решил эту задачу так. 1) объявил бы private-переменную в классе Form1:
2) написал бы Property для доступа у этому полю:
3) В классе Form2 создал бы конструктор, к-й бы в качестве входного параметра принимал ссылку на Form1:
4) Все. Теперь я могу обращаться к полям первой формы:
З.Ы. Кстати, в Java то же самое. -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
||||||||||
|
|||||||||||
Tomcat |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2003 Где: Гродно, Беларусь Репутация: 2 Всего: 2 |
Свои пять копеек... Для этих целей в ООП обычно используют открытые статические переменные. Вот хорошая конструкция Singleton-класса (класса, для которого может существовать только один экземпляр объекта). Грубо говоря, глобальная переменная строго определенного типа.
Это сообщение отредактировал(а) Tomcat - 2.6.2005, 18:26 |
||||
|
|||||
simanyay |
|
|||
![]() Антон Ковалёв ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2053 Регистрация: 22.8.2002 Репутация: нет Всего: 36 |
Я по другому понял задачу. Я понял, что необходимо просто использовать внешние переменные другого класса. -------------------- «It's better to be a pirate than to join the Navy» — Steve Jobs. |
|||
|
||||
crang |
|
|||
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 3.6.2004 Где: Ukraine Репутация: нет Всего: нет |
Ух уж это ООП..
Kurt Спасибо за разъяснение, технологию я понял. Простите за невнятное описание проблемы - учусь ведь вот ![]() |
|||
|
||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 92 |
Вообще, то что ты делаешь это очень плохо. Дочерняя форма не должна зависеть от родительской... Но это уже детали ![]() -------------------- Да. Именно так. |
|||
|
||||
crang |
|
|||
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 3.6.2004 Где: Ukraine Репутация: нет Всего: нет |
Дрон
я это уже понял - использую tabControl |
|||
|
||||
Zdvig |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 3.5.2005 Репутация: 1 Всего: 1 |
Как к textBox первой формы присвоить значение textBox воторой формы. У первого текстового поля видимость выставлена public. Ни одн из вышеперечисленных способов не помогает...
То же отностится и к текстовым переменным. Во всех случаях они возвращают пустоту, вместо строки... Это сообщение отредактировал(а) Zdvig - 4.9.2005, 14:32 --------------------
Лампочка - ожерелье голых поп. Вся любовь - оп-хоп-хоп! |
|||
|
||||
Kurt |
|
|||
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: 20 Всего: 36 |
А ну, покажи как ты это делаешь. Есессно, убрав не относящиеся к делу строчки. ![]() -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
|||
|
||||
Zdvig |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 3.5.2005 Репутация: 1 Всего: 1 |
Использую компонент GmailNotifierControl с CodeProject.com, но не как отдельную dll, а интегрированный в мой проект. Из ннего: Делаю экземпляр класса Form1.
Далее в программе:
--------------------
Лампочка - ожерелье голых поп. Вся любовь - оп-хоп-хоп! |
||||||
|
|||||||
mr.DUDA |
|
||||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Вот это интересно. Какой тут может быть "design time" ? В дизайнере добавил на свой GmailNotifierControl форму, что ли ? Если да, посмотри InitializeComponent, может там экземпляр формы уже создаётся автоматически, и код:
просто создаёт ещё одну форму, не относящуюся к делу. -------------------- ![]() |
||||
|
|||||
Kurt |
|
|||
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: 20 Всего: 36 |
Zdvig
Постарайся все-таки сделать так, как я объяснял выше. То есть передавай ссылку на форму через конструктор, а не создавай еще одну форму. -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
|||
|
||||
Zdvig |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 3.5.2005 Репутация: 1 Всего: 1 |
Я так пробовал, уже просто незнаю что делать.... Конструкции типа private Form1 frm1 и дальнейшее обращение к frm1 вообще не работают. Пишет не найден Form1 в неймспейсе.
![]() ![]() ![]() Выкладываю всю программу, может посмотрите что так как. Я просто бессилен тут.... Присоединённый файл ( Кол-во скачиваний: 9 ) ![]() --------------------
Лампочка - ожерелье голых поп. Вся любовь - оп-хоп-хоп! |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Держи, вот твоя программа с исправлениями:
Присоединённый файл ( Кол-во скачиваний: 23 ) ![]() -------------------- ![]() |
|||
|
||||
Zdvig |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 3.5.2005 Репутация: 1 Всего: 1 |
Значит все беда была из за
Меня щас расплющит от моего ламерства ![]() mr.DUDA Спасибо тебе огромное!! --------------------
Лампочка - ожерелье голых поп. Вся любовь - оп-хоп-хоп! |
|||
|
||||
mr.DUDA |
|
||||||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Да нет, просто ты форму создавал по новой, хотя форма уже была. Контрол твой "NotifierInfo" нужно было создавать конструктором, принимающим параметр типа "форма" со значением, указывающим родительскую форму:
соответственно:
и далее, обработчик события "клик по label1 внутри балуна NotifierInfo" должен не создавать новый объект "форма", а использовать реально существующий, т.е. тот который был передан в параметре конструктора NotifierInfo:
-------------------- ![]() |
||||||
|
|||||||
Zdvig |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 3.5.2005 Репутация: 1 Всего: 1 |
Этого я даже предположить не мог ![]() PS: сложно как-то в C# обстоят дела с доступом к переменным. ![]() --------------------
Лампочка - ожерелье голых поп. Вся любовь - оп-хоп-хоп! |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Да всё логично.
В конструктор подчинённого объекта передаётся ссылка на вышестоящий объект. Далее подчинённый объект (NotifierInfo) общается с вышестоящим (Form1) только через эту ссылку. Почему ? Ну представь себе, к примеру, такой случай. Есть дерево, состоящее из узлов. Узлами в дереве являются объекты. Друг о друге они почти ничего не знают, и не должны, т.к. в дереве порядок следования объектов - совершенно произвольный. Теперь попробуй сделать так, чтобы объекты могли взаимодействовать между собой. Как организовать связи между вышестоящими и подчинёнными объектами ? Естественным решением является наличие в объекте таких полей как Parent и Children. В твоём примере тоже как бы дерево, но состоящее всего из двух узлов - Form1 и NotifierInfo. Ну а теперь самое главное: откуда узел "NotifierInfo" узнаёт об узле "Form1", который для него как-бы Parent ? Другими словами, как получить информацию для сохранения в поле Parent (у тебя это NotifierInfo.frm1) ? Открыть свойство Parent на запись всему миру ? Это абсолютно неприемлемо с точки зрения объектно-ориентированного программирования, потому что такое свойство инкапсулировано в объекте и внешнему миру должно быть открыто только для чтения ! Вот поэтому и приходим к такой парадигме: если у объекта есть данные, которые инициализируются один раз при создании объекта, эти данные должны быть проинициализированы в конструкторе (явно либо неявно). Отсюда и вытекает код, принимающий в конструкторе NotifierInfo ссылку на форму и сохраняющий эту ссылку в поле frm1. P.S. надеюсь, понятно объяснил ![]() -------------------- ![]() |
|||
|
||||
Zdvig |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 3.5.2005 Репутация: 1 Всего: 1 |
mr.DUDA
Ага, пример удачный ![]() ![]() --------------------
Лампочка - ожерелье голых поп. Вся любовь - оп-хоп-хоп! |
|||
|
||||
xsb3 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 1.12.2006 Репутация: нет Всего: нет |
Народ вот ссылка на мой проект. http://xsb3.ifolder.ru/544137 в нем необходимо из формы 1 вызвать форму 2
в форме 2 есть поля textBox. находящийся текст в которых должен после нажатия кнопки ОК записаться в listView формы 1. Если кто сможет исправить выложите потом ссылку на фаилы наверно всем пример будет интересен. |
|||
|
||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 92 |
Модератор: А почитать эту и закреплённые в этом разделе темы не пробовал? Я так смотрю у тебя в том проекте ничего не сделано. А всё интересное уже было в теме Как обратиться к объекту другой формы -------------------- Да. Именно так. |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |