Удаление кнопки после ее нажатия
Если просто писать Free в обработчике события OnClick вылетает ошибка, хотя кнопка удаляется. Такая ошибка происходит не всегда, закономерности ее появления пока не нашел.
Может кто-то сталкивался с такой проблемкой.
begin
Button1.Visible := false;
end;
Цитата: user13
procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Visible := false;
end;
begin
Button1.Visible := false;
end;
так кнопка станет невидимой, но не удалится.
[quote=DriveIS]Если просто писать Free в обработчике события OnClick вылетает ошибка, хотя кнопка удаляется. Такая ошибка происходит не всегда, закономерности ее появления пока не нашел.[/quote]
приведи пример кода, в результате отработки которого вылазиет ошибка.
Цитата: DriveIS
Если просто писать Free в обработчике события OnClick вылетает ошибка, хотя кнопка удаляется.
Ессно будет ошибка. Как можно удалять объект в его собственном методе?
Цитата: IL84
Как можно удалять объект в его собственном методе?
метод будет не кнопки, а формы
Цитата: DriveIS
Такая ошибка происходит не всегда, закономерности ее появления пока не нашел.
Может кто-то сталкивался с такой проблемкой.
Может кто-то сталкивался с такой проблемкой.
вероятно вы где то обращаетесь к уже уничтоженной кнопке
При отображении формы закинь в onClick имя процедуры.
При удалении ты удалишь кнопочку а процедурка у тебя будет висеть и можешь вызвать где тебе понадобится
Цитата: Liverpool
При удалении ты удалишь кнопочку а процедурка у тебя будет висеть и можешь вызвать где тебе понадобится
Сам-то понял, что сказал?
Цитата: Freeman
Сам-то понял, что сказал?
я то понял!!!
пишу пример:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.Enabled:=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
button1.Free;
timer1.Free
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
timer1.Enabled:=false;
end;
end.
в свойствах тайемра интервал ставишь на 1
типа того... работает?
Цитата: Михаил
вероятно вы где то обращаетесь к уже уничтоженной кнопке
наверно так и есть!
чего распинаться! у него 100% где-то есть обращение к уничтоженной кнопке!
Цитата: ahilles
наверно так и есть!
чего распинаться! у него 100% где-то есть обращение к уничтоженной кнопке!
чего распинаться! у него 100% где-то есть обращение к уничтоженной кнопке!
Полностью согласен с ahilles.
приведенный мною код в сообщении #10 работает даже если где-то есть обращение к уничтоженной кнопке! Проверил сам...