![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
MDI: Как обратится из одной child формы к объектам другой child ф [D7, Win2k]
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 или передавай указатель явным образом.