Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.30;
Скачать: CL | DM;

Вниз

Помогите обратится к компоненту, расположенному на другой форме!   Найти похожие ветки 

 
Борис ©   (2002-09-19 15:07) [0]

Всем привет!

Вообще не думал, что возникнет такой вот косяк!
В общем етсь родительская MDI форма!
Дочернии MDI формы (разные, каждой по 1) вызываются вот так:

procedure Tfmain.SpeedItem1Click(Sender: TObject);
var iCount : integer;
i : boolean;
begin
i:=true;

for iCount:= MDIChildCount-1 downto 0 do
if MDIChildren[iCount].Name= "fbase" then i := false;

if i=true then
Tfbase.Create(Self);

end;

Ну и так для каждой.

Вот есть MDI формы fbase and ffilter

Как обратиться с формы fbase на форму ffilter, я обращаюсь так, а оказывается нельзя так делать!
Я обращаюсь например так (с формы fbase)
ffilter.Edit1.Text:="555";


 
lenin ©   (2002-09-19 15:09) [1]


> Как обратиться с формы fbase на форму ffilter, я обращаюсь
> так, а оказывается нельзя так делать!

А почему нельзя (что дельфя говорит), может ты модуль с ffilter в uses не объявил?


 
Борис ©   (2002-09-19 15:14) [2]

Да все объявил! Именно с одно дочерней на другую не получается ;-)

Я уже мучился, взял, на другой просто TEdit бросил, и фиг, не пашет!


 
lenin ©   (2002-09-19 15:19) [3]

А что пишет?


 
Борис ©   (2002-09-19 15:34) [4]

Скриншот (около 6Кб) см здесь:
http://www.selsoft.ru/error1.jpg


 
Борис ©   (2002-09-19 15:44) [5]

И еще, проверил, даже с родительской нельзя обратиться к компоненту на дочерней!

Может проблема в том, как я создаю эту форму?

И главное, форма точно создана!


 
lenin ©   (2002-09-19 15:46) [6]

Попробуй так:
for iCount:= главная_форма.MDIChildCount-1 downto 0 do
if главная форма.MDIChildren[iCount].Name = "Form2" then (form1.MDIChildren[iCount] as TForm2).Edit1.text:="555";


 
Андрей Прокофьев ©   (2002-09-19 15:49) [7]

if i=true then
Tfbase.Create(Self);
Здесь ошибка


 
Alx2 ©   (2002-09-19 15:51) [8]

>Борис © (19.09.02 15:44)

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

Насколько я понял, они все создаются как Tfbase.Create(Self);
И указатели на конкретные экземпляры форм сидят в MDIChildren.
Поэтому, как вариант, нужно искать в MDIChildren нужную форму, выполнить приведение типов, если таковая имеется, и получить доступ к ее компонентам.


 
Борис ©   (2002-09-19 15:55) [9]

to Андрей Прокофьев
А в чем, вроде ищу в списке доступных, если нет такой, то создаю ;-)

to Alx2
Да нет, каждый создается со своим именем!
Вот как создается другая форма:
for iCount:= MDIChildCount-1 downto 0 do
if MDIChildren[iCount].Name= "fbasedetail" then i := false;

if i=true then Tfbasedetail.Create(Self);


 
Alx2 ©   (2002-09-19 16:04) [10]

>if MDIChildren[iCount].Name= "fbasedetail"
не всегда имеет отношение к реальному имени. Здесь Name - просто cв-во класса. Но и его можно использовать для доступа (искать нужную форму по имени в списке других форм)


 
Борис ©   (2002-09-19 16:13) [11]

Спасибо ВСЕМ!
Доступ удалось получить! Все работает!
Еще раз спасибо ;-)


 
lenin ©   (2002-09-19 16:13) [12]


> Борис © (19.09.02 15:55)

Если бы ты создовал не так
Tfbase.Create(Self);
а
fbase:=Tfbase.Create(Self);
Тогда бы, наверное, все было нормально.




Страницы: 1 вся ветка

Текущий архив: 2002.09.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
1-98216
Dmitriy Polskoy
2002-09-18 14:28
2002.09.30
MDI приложение


1-98146
dim-
2002-09-17 16:04
2002.09.30
Ole контейнер


7-98381
BY_KAN
2002-07-22 03:19
2002.09.30
НЕ ПАШЕТ AX=7305h INT 21h Абсол. чтен/запись


1-98032
Daken
2002-09-18 19:15
2002.09.30
Delphi и flash кнопки


8-98225
Ден
2002-03-21 20:30
2002.09.30
Как проиграть в своей проге два аудио файла одновременно