私はDelphi Prism for Monoでプログラミングしています。ウィンドウフォームがクラス内で宣言され、コンストラクターでインスタンス化されているにもかかわらず、すでに開いて閉じたウィンドウフォームを開いた後に、このエラー「取り消し済みオブジェクトにアクセスできません」が表示され続けます。ここでDelphi Prismの配置オブジェクトにアクセスできない
は、それが宣言されたクラスです。
MainForm = partial class(System.Windows.Forms.Form)
private
method SignalBtn_Click(sender: System.Object; e: System.EventArgs);
method CommBtn_Click(sender: System.Object; e: System.EventArgs);
method button1_Click(sender: System.Object; e: System.EventArgs);
method button2_Click(sender: System.Object; e: System.EventArgs);
method button4_Click(sender: System.Object; e: System.EventArgs);
method button5_Click(sender: System.Object; e: System.EventArgs);
method MainForm_Load(sender: System.Object; e: System.EventArgs);
method ShutdownBtn_Click(sender: System.Object; e: System.EventArgs);
method MySerialData(sender: System.Object; e:SerialDataReceivedEventArgs);
method LoginBtn_Click(sender: System.Object; e: System.EventArgs);
protected
method Dispose(disposing: Boolean); override;
public
RX:Array[0..5] of byte;
TX:Array[0..6] of byte;
serialPort1:System.IO.Ports.SerialPort;
thr:Thread;
stoploop:Boolean;
mcommand:Byte;
thechannel:Integer;
fr : UnitForm; <<<<<<<<<<<< Here is the form being declared.
constructor;
method FillTable;
method mythread;
end;
ここではそれがインスタンス化または作成されたコンストラクタさ:
constructor MainForm;
begin
//
// Required for Windows Form Designer support
//
InitializeComponent();
mcommand:=$AA;
thechannel:=$01;
stoploop:=false;
thr:=nil;
fr := new UnitForm; <<<<<<<<<<<<<<<<<< fr is created as new.
//
// TODO: Add any constructor code after InitializeComponent call
//
end;
ここでは、フォームが内に示さたり開いたりする方法でありますボタンイベント:
method MainForm.UnitBtn_Click(sender: System.Object; e: System.EventArgs);
begin
fr.Show;
end;
このfrは、クラスの一部であるウィンドウフォームですグローバル変数、なぜあなたがそれを開いた後にそれを閉じるときに、ウィンドウのフォームが配置されます。プログラム全体が簡単にアクセスできるようになるまでメモリに保存されていませんか?
UPDATE:onFormClosing以内 、私は、フォームを非表示にし、動作しているようですが、私はもう一度、フォームを再開しようとすると、それは以前と同じ例外を発生させ、「破棄されたオブジェクトにアクセスできません。」
method UnitForm.UnitForm_FormClosing(sender: System.Object; e: System.Windows.Forms.FormClosingEventArgs);
begin
hide;
end;
私が参照してください。意味がありますが、システムメニューのボタンをクリックしてxを押すとどうなりますか?これはウィンドウの右上隅にあります。あなたはどのようにそれを引き起こしますか? – ThN
OnFormClosingイベントは、反応できる場所です。 FormClosingEventArgsにイベントをキャンセルする可能性があります。代わりにHideを呼び出すことができます。もちろん、実際にウィンドウを閉じて廃棄する必要がない場合にのみ、イベントを取り消す必要があります。 –
@セバスチャン:FWIW、Delphiでは、フォームを閉じることなく、それ自体を解放することができます。これはプロパティの設定です。 –