Tôi vui lòng yêu cầu bạn tư vấn về vấn đề sau tôi gặp phải ở Delphi với khối try/except
.Làm cách nào để bắt ngoại lệ trong sự kiện TDataModule.OnCreate?
Tôi có một ứng dụng đơn giản - một trong những MainForm có tên fr_MAIN
và một TDataModule
có tên DM
. DM
không phải là tính năng tự động tạo ra, nhưng nó được tạo ra tại thời gian chạy trong fr_MAIN
's Button2.OnClick
sự kiện:
procedure Tfr_MAIN.Button2Click(Sender: TObject);
begin
try
DM := TDM.Create(nil);
Showmessage('DM started!');
except
on E:Exception do
begin
Showmessage('DM not started!');
end;
end;
DM
có một số mã trong sự kiện OnCreate
của nó:
procedure TDM.DataModuleCreate(Sender: TObject);
begin
raise Exception.Create('this is error!');
// DM code here ...
end;
Vấn đề là khi Tôi nhấp vào Button2
, tôi nhận được thông báo ngoại lệ 'this is error!'
, phần còn lại của DM code here
không chạy - điều đó là chính xác! Nhưng sau đó tôi cũng nhận được thông báo 'DM started!'
thay vì thông báo 'DM not started!'
.
Ngoại lệ được tăng lên bởi DM
ngắt hành động nhưng không bị bắt trong khối except
của biểu mẫu!
Tại sao điều này?
Theo mặc định, 'TApplication' cho' TDataModule' nuốt một ngoại lệ được nêu ra bởi sự kiện 'TDataModule.OnCreate' (xem câu trả lời của Tom để biết chi tiết cụ thể). Để làm những gì bạn đang yêu cầu, bạn nên ghi đè lên hàm khởi tạo ảo 'TDataModule.Create()' để tăng ngoại lệ, thay vì sử dụng sự kiện 'TDataModule.OnCreate'. –