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

Вниз

Странный глюк при работе с двумя формами.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.014 c
15-1209657757
NaRuTo
2008-05-01 20:02
2008.06.15
Bink32.dll


15-1209886588
Ega23
2008-05-04 11:36
2008.06.15
Вэкап-файлы (те которые с ~)


2-1211305467
Magos
2008-05-20 21:44
2008.06.15
Задействование клавиши бэкспэйс в данном случае


2-1211279284
StiTch
2008-05-20 14:28
2008.06.15
Вкладки


2-1211544521
Vladi78
2008-05-23 16:08
2008.06.15
Передача объектов по TCP/IP