![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите обратится к компоненту, расположенному на другой форме! [D5, Win95/98]
Борис © (2002-09-19 15:07:00)Всем привет!
Вообще не думал, что возникнет такой вот косяк!
В общем етсь родительская 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";
Борис (2002-09-19 16:13:00) [1]Спасибо ВСЕМ!
Доступ удалось получить! Все работает!
Еще раз спасибо ;-)
lenin (2002-09-19 16:13:00) [2]
> Борис © (19.09.02 15:55)
Если бы ты создовал не так
Tfbase.Create(Self);
а
fbase:=Tfbase.Create(Self);
Тогда бы, наверное, все было нормально.
Alx2 (2002-09-19 16:04:00) [3]>if MDIChildren[iCount].Name= "fbasedetail"
не всегда имеет отношение к реальному имени. Здесь Name - просто cв-во класса. Но и его можно использовать для доступа (искать нужную форму по имени в списке других форм)
Борис (2002-09-19 15:55:00) [4]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 15:51:00) [5]>Борис © (19.09.02 15:44)
Та переменная, через которую ты хочешь получить доступ к нужной форме, скорее всего не проинициализированна.
Насколько я понял, они все создаются как Tfbase.Create(Self);
И указатели на конкретные экземпляры форм сидят в MDIChildren.
Поэтому, как вариант, нужно искать в MDIChildren нужную форму, выполнить приведение типов, если таковая имеется, и получить доступ к ее компонентам.
Андрей Прокофьев (2002-09-19 15:49:00) [6]if i=true then
Tfbase.Create(Self);
Здесь ошибка
lenin (2002-09-19 15:46:00) [7]Попробуй так:
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:44:00) [8]И еще, проверил, даже с родительской нельзя обратиться к компоненту на дочерней!
Может проблема в том, как я создаю эту форму?
И главное, форма точно создана!
Борис (2002-09-19 15:34:00) [9]Скриншот (около 6Кб) см здесь:
http://www.selsoft.ru/error1.jpg
lenin (2002-09-19 15:19:00) [10]А что пишет?
Борис (2002-09-19 15:14:00) [11]Да все объявил! Именно с одно дочерней на другую не получается ;-)
Я уже мучился, взял, на другой просто TEdit бросил, и фиг, не пашет!
lenin (2002-09-19 15:09:00) [12]
> Как обратиться с формы fbase на форму ffilter, я обращаюсь
> так, а оказывается нельзя так делать!
А почему нельзя (что дельфя говорит), может ты модуль с ffilter в uses не объявил?