要約: 1つのフォーム(ローンフォーム)は、DatePickerFormという名前のモーダルフォームをユーザーが特定のボタンをクリックすると動的に作成します。 DatePickerFormで日付を選択すると、ユーザーはそのフォームの「閉じる」ボタンをクリックします。(BitBtn) - これが原因でアクセス違反エラーが発生します。- 動的に作成されたモーダルフォームを閉じるとアクセス違反が発生する
詳細:
再利用可能なモーダルDatePickerFormの目的は、特別な状況で日付を入力する一貫した方法をユーザーに提供することです。それは、他の複数の状況で使用されます。つまり、計画通りに動作させるとします。
正確なエラーテキストは次のとおりです: "プロジェクトABCD.exeが例外クラス$ C0000005を発生させました。 '0x0060d0b1にアクセス違反がありました:0x00000000のアドレスが読み取られました。
コードをコンパイルし、プログラムが正常に動作するまで以下のステップ4:
ランタイムプロセス:
- ローンフォーム上のボタンをユーザがクリック(を作品)
- モーダルフォームDatePickerFormが作成され(所有者:アプリケーション)、次に表示されます。 (works)
- ユーザーは、DatePickerコントロールから日付を選択します。 OKボタンを
- ユーザーがクリック(がを失敗した)
- (がを作品)DatePickerFormを閉じる必要がありますし、我々はローンのフォームに戻す必要があります - しかし、エラーが代わりに発生します。 次のステップは、日付ピッカーのフォーム日付ピッカーコントロールにはまだ日付を読み込むことになる
- (フォームがまだ存在し、それはこの時点でちょうど見えない)
私の質問:
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.
おかげでデビッド - それをやった!!!!私は間違いなくこれをさらに研究しなければなりません(私は物事の仕組みを理解していないのは嫌です)。ありがとう - ジョン –