私はDelphiPrismforMonoでプログラミングしています。ウィンドウフォームがクラス内で宣言され、次のようにコンストラクターでインスタンス化されているにもかかわらず、既に開いているウィンドウフォームと閉じているウィンドウフォームを開いた後、このエラー「破棄されたオブジェクトにアクセスできません」が表示され続けます。
宣言されているクラスは次のとおりです。
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はグローバル変数によく似たクラスの一部であるウィンドウフォームであるため、ウィンドウフォームを開いた後に閉じるとウィンドウフォームが破棄されるのはなぜですか。簡単にアクセスできるようにプログラム全体がシャットダウンされるまで、メモリに保持されませんか?
更新: onFormClosing内で、フォームを非表示にして機能しているように見えますが、フォームを再度開こうとすると、以前と同じ例外が発生します。「破棄されたオブジェクトにアクセスできません」。
method UnitForm.UnitForm_FormClosing(sender: System.Object; e: System.Windows.Forms.FormClosingEventArgs);
begin
hide;
end;