Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

MDI: Как обратится из одной child формы к объектам другой child ф [D7, Win2k]


Страницы:   1 2

CAMCOH ©   (2005-05-25 20:07:00) 

Собственно вопрос в subj
MDI: Как обратится из одной child формы к объектам другой child формы.
Например у меня есть такая строка:

s:=form2.edit1.Text;

Которая вызывается из form1.

Программа ругается и маерится. Обе формы child.
Заранее спасибо за ответ...


Defunct   (2005-05-25 20:43:00) [21]

Mx ©   (25.05.05 20:39) [14]

Глобальные переменные это очень плохо, а особенно там где форма может быть просто закрыта.

Надеюсь вы знаете к чему приведет выполнение оператора S := Form2.Edit1.Text; если Form2 по какой-то причине оказалась несозданной или уже уничтоженной.

> Если все грамотно сделано
то в программе нет глобальный переменных вообще. Соответственно отсутствует и "гемор" с "чужими" свойствами.


CAMCOH   (2005-05-25 20:41:00) [22]

Джо.

Юниты включены.
Матерится = Access violation at adress.....


Mx   (2005-05-25 20:40:00) [23]


> Просто Джо ©   (25.05.05 20:38) [13]
> > [12] CAMCOH ©   (25.05.05 20:38)
> Ты не ответил на [9].


CAMCOH   (2005-05-25 20:39:00) [24]

Defuct я прекрасно понимаю что эту задачу можно решить с глобальными переменными если ты к этому клониш, но всётаки как её решить в лоб.
Я просто уже неоднократно сталкивался с этим и хочется уже узнать как можно это решить


Mx   (2005-05-25 20:39:00) [25]


> особенно посредством глобальных переменных

Не понимаю, что такого плохого в глобальных переменных? Если все грамотно сделано, можно избежать лишнего гемора со свойствами.


Просто Джо   (2005-05-25 20:38:00) [26]


> [12] CAMCOH ©   (25.05.05 20:38)


Ты не ответил на [9].


CAMCOH   (2005-05-25 20:38:00) [27]

Mx можешь на наглядном примере объяснить с указателями...
Я к сожалению далёк от этого.


Defunct   (2005-05-25 20:37:00) [28]

Mx ©   (25.05.05 20:30) [7]

Не требуется говорить, и так ясно что Form2 - глобальная переменная.

CAMCOH ©   (25.05.05 20:33) [8]

Ну давайте попробуем решить вашу задачу. Расскажите что ваша программа должна делать, и почему возникла необходимость обращаться к полям некой формы из других форм.


Mx   (2005-05-25 20:36:00) [29]

А в чем проблема то? Если есть указатели на эти формы и формы эти уникальны (т.е. ни одна форма никогда больше не присвоит этим указателям себя), то их и используй.


Просто Джо   (2005-05-25 20:36:00) [30]


> Программа ругается и маерится.

Желательно поподробней.
Вообще думаю, что у тебя просто юнит с второй формой просто не включен в uses clause первой. То есть, сделать так:


unit Unit1;

interface
uses Unit2,...


Но, как справедливо заметили, лучше постараться избегать такой чрезмерной зависимости форм друг от друга, особенно посредством глобальных переменных.


CAMCOH   (2005-05-25 20:33:00) [31]

Form1 и Form2 это дочерние формы.
Понятно что всё это нехорошо и надо избегать. Но всётаки как решить такую задачу ?


Mx   (2005-05-25 20:30:00) [32]


> Defunct ©   (25.05.05 20:28) [5]
> в данном случае Form2 - глобальная переменная

В данном случае вообще не сказано, что такое Form2.


Mx   (2005-05-25 20:29:00) [33]

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


Defunct   (2005-05-25 20:28:00) [34]

CAMCOH ©   (25.05.05 20:07)  

Нужно избегать такой ситуации. Подумайте как можно сделать так, чтобы не было необходимости обращаться к элементам некой формы из других форм.

> s:=form2.edit1.Text;
Строки такого вида приводят к глюкам. Старайтесь избегать обращения к глобальным переменным (в данном случае Form2 - глобальная переменная)


CAMCOH   (2005-05-25 20:25:00) [35]

Mx а как узнать index формы ?


Mx   (2005-05-25 20:20:00) [36]

Ну как... У главной формы есть свойство MDIChildren[Index: Integer]: TForm, в нем содержаться все ее дочерние формы, кол-во которых ранво MDIChildCount. Используешь приведение типов и получаешь:

TНужнаяФорма(ГлавнаяФорма.MDIChildren[НужныйИндекс]).НужныйКонтрол и т.д.

А вообще, что такое Form1 и Form2? Когда им присваивается значение?


CAMCOH   (2005-05-25 20:18:00) [37]

Mx а можно поподробнее ?


Mx   (2005-05-25 20:17:00) [38]

Используй свойство MDIChildren или передавай указатель явным образом.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо