Форум: "Начинающим";
Текущий архив: 2008.06.15;
Скачать: [xml.tar.bz2];
ВнизСтранный глюк при работе с двумя формами. Найти похожие ветки
← →
red_imp © (2008-05-21 13:13) [0]Никак не могу понять в чем проблема. Один старый проект, все работало нормально, надо было немнго его подправить.
После исправлений совершенно другой процедуры, начало выкидывать глюки:
Из главной формы вызываеться форма - для заполнения данных
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;"
Мож кто пнет в правильном направлении?
← →
Palladin © (2008-05-21 13:15) [1]form1 не существует
← →
Ega23 © (2008-05-21 13:19) [2]
> form1 не существует
или form1.Label2 или CmboBox1
← →
Red_imp © (2008-05-21 13:21) [3]Хм, это как? Я из form1, создаю form2, и form2 делаю модальной, при этом с первой формой ничего не делаю, она просто висит неактивная. Причем все работает но через раз.
← →
Red_imp © (2008-05-21 13:22) [4]Ega23 ©
Все существует (( проверял.
← →
Palladin © (2008-05-21 13:23) [5]form1 это переменная к которой ты обращаешься, вот в валидности ее значения и есть сомнения
← →
Ega23 © (2008-05-21 13:25) [6]Вообще-то как-то через задницу сделано...
Зачем модальной форме знать что-то об объекте, из которого её вызвали?
← →
Red_imp © (2008-05-21 13:31) [7]
> Вообще-то как-то через задницу сделано...
Согласен ))
Просто через form2 передаю данные в головну форму, сделано для удобства пользователя.
> form1 это переменная к которой ты обращаешься, вот в валидности
> ее значения и есть сомнения
form1 - форма на которой находяться Label2 и Label3, они там есть 100%
Хм непонятно просто почему оно работает через раз, причем очень странно
← →
Palladin © (2008-05-21 13:32) [8]
> form1 - форма на которой находяться Label2 и Label3, они
> там есть 100%
причем тут label2 и label3
я тебе про переменную form1 говорю
а работает через раз, потому что через задницу сделано
← →
Palladin © (2008-05-21 13:33) [9]за обращение к глобальным идентификаторам вообще нужно бить больно по нежным местам
← →
Red_imp © (2008-05-21 13:34) [10]
> я тебе про переменную form1 говорю
Тоже существует
← →
Умище (2008-05-21 13:36) [11]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:37) [12]
> за обращение к глобальным идентификаторам вообще нужно бить
> больно по нежным местам
Каюсь, есть грех. Но всетаки...
← →
Red_imp © (2008-05-21 13:42) [13]Умище
Спасибо попробую ))
Да и еще эта конструкция работала коректно около года.
← →
Сергей М. © (2008-05-21 13:44) [14]
> эта конструкция работала коректно около года.
Интересно, сколько протянет "конструкция" Умища ?)
← →
Anatoly Podgoretsky © (2008-05-21 13:46) [15]Ты так и будешь произносить заклинания, не шаман же.
← →
Умище (2008-05-21 13:57) [16]
> Сергей М. © (21.05.08 13:44) [14]
>
> > эта конструкция работала коректно около года.
>
>
> Интересно, сколько протянет "конструкция" Умища ?)
Дык а чего ей сделается-то?-))
← →
Сергей М. © (2008-05-21 14:06) [17]
> а чего ей сделается-то?
Полагаю, примерно то же, что череp год сделалось с шедевральной "конструкцией" автора)
← →
Умище (2008-05-21 14:07) [18]Что же он с ней сотворил...
← →
ЮЮ © (2008-05-22 03:51) [19]> Дык а чего ей сделается-то?-))
> Form1.Label2.Caption := Form2.ComboBox1.Text;
Не факт, что переменная Form1 указывает на тот экземпляр класса TForm1 у которого выполняется метод Button5Click.
вместо
Form1.Label2.Caption := Form2.ComboBox1.Text;
следует писать
Label2.Caption := Form2.ComboBox1.Text;
← →
Anatoly Podgoretsky © (2008-05-22 09:04) [20]
> Дык а чего ей сделается-то?-))
А почему не классика?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 09:18) [21]
> вместо
> 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:40) [22]> Умище (22.05.2008 09:18:21) [21]
Точно, именно глобальная переменная?
А может он на это согласится.
В коде не оставлено даже шанса для ошибки.
Кстати к слову, я никогда не стал бы использовать Release в данном контексте, только Free
← →
Red_imp © (2008-05-22 13:09) [23]Всем спасибо )) Особенно Anatoly Podgoretskу
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.06.15;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.006 c