![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Странный глюк при работе с двумя формами. [D5, XP]
red_imp © (2008-05-21 13:13:00)Никак не могу понять в чем проблема. Один старый проект, все работало нормально, надо было немнго его подправить.
После исправлений совершенно другой процедуры, начало выкидывать глюки:
Из главной формы вызываеться форма - для заполнения данных
procedure TForm1.Button5Click(Sender: TObject); //"Выровнять"
begin
/////////////
Application.CreateForm(TForm2 , Form2);
form2.ShowModal;
////////////
end;
после ввода данных, и нажатия одной из кнопок, передаються данные на главную форму
procedure TForm2.Button1Click(Sender: TObject);
begin
if edit1.Text='' then begin showmessage('Введите данные'); edit1.SetFocus; end
else begin
form1.Label2.Caption:=ComboBox1.Text;
form1.Label3.Caption:=edit1.text;
form1.virint(1);
form2.close;
end;
end;
После чего оно через раз выкидывает ошибку
"access violation at adress 00490AB4 in module 'Project1'. Read of address 000004DE"
на строчке "Form1.Label2.Caption:=ComboBox1.Text;"
Мож кто пнет в правильном направлении?
Red_imp (2008-05-22 13:09:00) [1]Всем спасибо )) Особенно Anatoly Podgoretskу
Anatoly Podgoretsky (2008-05-22 09:40:00) [2]> Умище (22.05.2008 09:18:21) [21]
Точно, именно глобальная переменная?
А может он на это согласится.
В коде не оставлено даже шанса для ошибки.
Кстати к слову, я никогда не стал бы использовать Release в данном контексте, только Free
Умище (2008-05-22 09:18:00) [3]
> вместо
> Form1.Label2.Caption := Form2.ComboBox1.Text;
> следует писать
> Label2.Caption := Form2.ComboBox1.Text;
> Anatoly Podgoretsky © (22.05.08 09:04) [20]
Это лучше, конечно, но автору нужна именно Form1.Label2-)
Anatoly Podgoretsky (2008-05-22 09:04:00) [4]
> Дык а чего ей сделается-то?-))
А почему не классика?
procedure TForm1.Button5Click(Sender: TObject); //"Выровнять"
begin
with TForm2.Create(self) do
try
if ShowModal = mrOk then begin
Self.Label2.Caption := ComboBox1.Text;
end;
finally
Free;
end;
end;
ЮЮ (2008-05-22 03:51:00) [5]> Дык а чего ей сделается-то?-))
> Form1.Label2.Caption := Form2.ComboBox1.Text;
Не факт, что переменная Form1 указывает на тот экземпляр класса TForm1 у которого выполняется метод Button5Click.
вместо
Form1.Label2.Caption := Form2.ComboBox1.Text;
следует писать
Label2.Caption := Form2.ComboBox1.Text;
Умище (2008-05-21 14:07:00) [6]Что же он с ней сотворил...
Сергей М. (2008-05-21 14:06:00) [7]
> а чего ей сделается-то?
Полагаю, примерно то же, что череp год сделалось с шедевральной "конструкцией" автора)
Умище (2008-05-21 13:57:00) [8]
> Сергей М. © (21.05.08 13:44) [14]
>
> > эта конструкция работала коректно около года.
>
>
> Интересно, сколько протянет "конструкция" Умища ?)
Дык а чего ей сделается-то?-))
Anatoly Podgoretsky (2008-05-21 13:46:00) [9]Ты так и будешь произносить заклинания, не шаман же.
Сергей М. (2008-05-21 13:44:00) [10]
> эта конструкция работала коректно около года.
Интересно, сколько протянет "конструкция" Умища ?)
Red_imp (2008-05-21 13:42:00) [11]Умище
Спасибо попробую ))
Да и еще эта конструкция работала коректно около года.
Red_imp (2008-05-21 13:37:00) [12]
> за обращение к глобальным идентификаторам вообще нужно бить
> больно по нежным местам
Каюсь, есть грех. Но всетаки...
Умище (2008-05-21 13:36:00) [13]procedure TForm1.Button5Click(Sender: TObject); //"Выровнять"
begin
Application.CreateForm(TForm2 , Form2);
try
if form2.ShowModal=mrOk then
Form1.Label2.Caption := Form2.ComboBox1.Text;
finally
Form2.Release; //Или Form2.Free;
end;
end;
Red_imp (2008-05-21 13:34:00) [14]
> я тебе про переменную form1 говорю
Тоже существует
Palladin (2008-05-21 13:33:00) [15]за обращение к глобальным идентификаторам вообще нужно бить больно по нежным местам
Palladin (2008-05-21 13:32:00) [16]
> form1 - форма на которой находяться Label2 и Label3, они
> там есть 100%
причем тут label2 и label3
я тебе про переменную form1 говорю
а работает через раз, потому что через задницу сделано
Red_imp (2008-05-21 13:31:00) [17]
> Вообще-то как-то через задницу сделано...
Согласен ))
Просто через form2 передаю данные в головну форму, сделано для удобства пользователя.
> form1 это переменная к которой ты обращаешься, вот в валидности
> ее значения и есть сомнения
form1 - форма на которой находяться Label2 и Label3, они там есть 100%
Хм непонятно просто почему оно работает через раз, причем очень странно
Ega23 (2008-05-21 13:25:00) [18]Вообще-то как-то через задницу сделано...
Зачем модальной форме знать что-то об объекте, из которого её вызвали?
Palladin (2008-05-21 13:23:00) [19]form1 это переменная к которой ты обращаешься, вот в валидности ее значения и есть сомнения
Red_imp (2008-05-21 13:22:00) [20]Ega23 ©
Все существует (( проверял.