摘要: 一種形式(貸款申請表,)(當用戶點擊一個特定的按鈕)動態地創建一個名爲DatePickerForm模式窗體。 在DatePickerForm選擇日期後,用戶點擊該窗體的「關閉」按鈕:(一BitBtn) - 這是什麼原因造成的訪問衝突錯誤。德爾福(西雅圖) - 關閉動態創建的模式窗體會導致訪問衝突
詳情:
可重複使用的模式DatePickerForm的目的是爲用戶提供在特殊情況下輸入日期的一致方法。它將用於其他多種情況 - 也就是說,如果我按計劃實現它的工作。
確切錯誤文字是:「項目ABCD.exe引發的異常類$ 0000005與消息‘訪問衝突在0x0060d0b1:讀取0x00000000地址的’。」
代碼編譯,程序正常工作,直到下面的步驟4:
運行時過程:
- 上的按鈕的用戶點擊貸款形式(工作)
- DatePickerForm模式將被創建(owner:Application),然後顯示。 (作品)
- 用戶選擇從DatePicker控件的日期。 (工作)
- 上的OK按鈕,用戶點擊(失敗)
- 的DatePickerForm應該關閉,我們應該回到貸款形式 - 而是發生錯誤。
- 下一步將依然對的DatePicker的形式DatePicker控件來讀取日期(形式仍然存在,它只是看不見的在這一點上)
我的問題:
A)如果這項工作或我使用動態表單創建不正確?
B)是否有更好的方式來實現這一目標?
任何幫助將不勝感激。
約翰
DatePickerForm代碼(完整):
unit DatePicker_PopupForm;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons, Vcl.ComCtrls;
type
TfmDatePicker_Popup = class(TForm)
DTDatePicker: TDateTimePicker;
lblDatePrompt: TLabel;
btnOK: TBitBtn;
procedure btnOKClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmDatePicker_Popup: TfmDatePicker_Popup;
implementation
{$R *.dfm}
procedure TfmDatePicker_Popup.btnOKClick(Sender: TObject);
begin
fmDatePicker_Popup.CloseModal;
end;
end.
貸款形式 - 部分代碼(完整的代碼大約是9700線長)
unit LoanForm;
interface
uses
Winapi.Windows, ......, DatePicker_PopupForm;
...
implementation
...
procedure TfmLoan.btnSetDefaultClick(Sender: TObject);
begin
DatePickerForm := TfmDatePicker_Popup.Create(Application);
DatePickerForm.DTDatePicker.Date := GD_ProcessDate;
DatePickerForm.ShowModal;
dDefaultDate := DatePickerForm.DTDatePicker.Date;
end;
...
end.
感謝大衛 - 即做到了!!!!我一定要進一步研究這個(我討厭不理解事情是如何工作的)。謝謝 - 約翰 –