Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Странный глюк при работе с двумя формами. [D5, XP]


Страницы:   1 2

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 ©
Все существует (( проверял.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо