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

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Доступ к переменным внутри проекта, как организовать? 
:(
    Опции темы
mr.DUDA
Дата 4.9.2005, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Цитата(Zdvig @ 4.9.2005, 15:13)
#region DesignTimeMembers
...
private WindowsApplication3.Form1 frm1;
#endregion

Вот это интересно. Какой тут может быть "design time" ? В дизайнере добавил на свой GmailNotifierControl форму, что ли ? Если да, посмотри InitializeComponent, может там экземпляр формы уже создаётся автоматически, и код:

Цитата(Zdvig @ 4.9.2005, 15:13)
private void lblInfo_Click(object sender, System.EventArgs e)
{
frm1 = new WindowsApplication3.Form1();

просто создаёт ещё одну форму, не относящуюся к делу.


--------------------
user posted image
PM MAIL WWW   Вверх
Kurt
Дата 4.9.2005, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


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

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



Zdvig
Постарайся все-таки сделать так, как я объяснял выше. То есть передавай ссылку на форму через конструктор, а не создавай еще одну форму.




--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Zdvig
Дата 4.9.2005, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я так пробовал, уже просто незнаю что делать.... Конструкции типа private Form1 frm1 и дальнейшее обращение к frm1 вообще не работают. Пишет не найден Form1 в неймспейсе. smile smile smile


Выкладываю всю программу, может посмотрите что так как. Я просто бессилен тут....

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  WindowsApplication3.rar.txt 43,93 Kb
--------------------
Лампочка - ожерелье голых поп. Вся любовь - оп-хоп-хоп!
PM MAIL   Вверх
mr.DUDA
Дата 4.9.2005, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Держи, вот твоя программа с исправлениями:


Присоединённый файл ( Кол-во скачиваний: 23 )
Присоединённый файл  WindowsApplication3.zip 23,40 Kb


--------------------
user posted image
PM MAIL WWW   Вверх
Zdvig
Дата 4.9.2005, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Значит все беда была из за

Код

frm1 = new WindowsApplication3.Form1();


Меня щас расплющит от моего ламерства smile



mr.DUDA
Спасибо тебе огромное!!
--------------------
Лампочка - ожерелье голых поп. Вся любовь - оп-хоп-хоп!
PM MAIL   Вверх
mr.DUDA
Дата 4.9.2005, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Да нет, просто ты форму создавал по новой, хотя форма уже была. Контрол твой "NotifierInfo" нужно было создавать конструктором, принимающим параметр типа "форма" со значением, указывающим родительскую форму:
Код
public Form1()
{
    InitializeComponent();
    NotifierInfo1 = new NotifierControl.NotifierInfo(this);
}


соответственно:
Код
public NotifierInfo(WindowsApplication3.Form1 formParent)
{
    InitializeComponent();
    this.frm1 = formParent;
}


и далее, обработчик события "клик по label1 внутри балуна NotifierInfo" должен не создавать новый объект "форма", а использовать реально существующий, т.е. тот который был передан в параметре конструктора NotifierInfo:

Код
private void lblInfo_Click(object sender, System.EventArgs e)
{
    MessageBox.Show(frm1.SomeValue);
    // никаких других действий типа this.frm1=new Form() не нужно !
}



--------------------
user posted image
PM MAIL WWW   Вверх
Zdvig
Дата 4.9.2005, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

public NotifierInfo(WindowsApplication3.Form1 formParent)    
{    
    InitializeComponent();    
    this.frm1 = formParent;    
}


Этого я даже предположить не мог smile

PS: сложно как-то в C# обстоят дела с доступом к переменным. smile
--------------------
Лампочка - ожерелье голых поп. Вся любовь - оп-хоп-хоп!
PM MAIL   Вверх
mr.DUDA
Дата 4.9.2005, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Да всё логично.
В конструктор подчинённого объекта передаётся ссылка на вышестоящий объект. Далее подчинённый объект (NotifierInfo) общается с вышестоящим (Form1) только через эту ссылку.

Почему ? Ну представь себе, к примеру, такой случай. Есть дерево, состоящее из узлов. Узлами в дереве являются объекты. Друг о друге они почти ничего не знают, и не должны, т.к. в дереве порядок следования объектов - совершенно произвольный. Теперь попробуй сделать так, чтобы объекты могли взаимодействовать между собой. Как организовать связи между вышестоящими и подчинёнными объектами ? Естественным решением является наличие в объекте таких полей как Parent и Children. В твоём примере тоже как бы дерево, но состоящее всего из двух узлов - Form1 и NotifierInfo.

Ну а теперь самое главное: откуда узел "NotifierInfo" узнаёт об узле "Form1", который для него как-бы Parent ? Другими словами, как получить информацию для сохранения в поле Parent (у тебя это NotifierInfo.frm1) ? Открыть свойство Parent на запись всему миру ? Это абсолютно неприемлемо с точки зрения объектно-ориентированного программирования, потому что такое свойство инкапсулировано в объекте и внешнему миру должно быть открыто только для чтения !

Вот поэтому и приходим к такой парадигме: если у объекта есть данные, которые инициализируются один раз при создании объекта, эти данные должны быть проинициализированы в конструкторе (явно либо неявно). Отсюда и вытекает код, принимающий в конструкторе NotifierInfo ссылку на форму и сохраняющий эту ссылку в поле frm1.

P.S. надеюсь, понятно объяснил smile


--------------------
user posted image
PM MAIL WWW   Вверх
Zdvig
Дата 5.9.2005, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



mr.DUDA

Ага, пример удачный smile Теперь буду воплощать это в жизнь, чтобы закрепить smile
--------------------
Лампочка - ожерелье голых поп. Вся любовь - оп-хоп-хоп!
PM MAIL   Вверх
xsb3
Дата 2.12.2006, 03:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Народ вот ссылка на мой проект. http://xsb3.ifolder.ru/544137 в нем необходимо из формы 1 вызвать форму 2
в форме 2 есть поля textBox.  находящийся текст в которых должен после нажатия кнопки ОК записаться в listView формы 1. 
Если кто сможет исправить выложите потом ссылку на фаилы наверно всем пример будет интересен.
PM MAIL   Вверх
Дрон
Дата 2.12.2006, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


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

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



Цитата(xsb3 @  2.12.2006,  03:16 Найти цитируемый пост)
Если кто сможет исправить выложите потом ссылку на фаилы наверно всем пример будет интересен. 

Модератор: А почитать эту и закреплённые в этом разделе темы не пробовал?
Я так смотрю у тебя в том проекте ничего не сделано.
А всё интересное уже было в теме Как обратиться к объекту другой формы


--------------------
Да. Именно так.
PM   Вверх
Закрытая темаСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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