我在 Delphi Prism 下为 Mono 编程。在打开已经打开和关闭的窗口窗体后,我不断收到此错误“无法访问已处理的对象”,即使窗口窗体是在类中声明并在构造函数中实例化如下。
这是声明它的类:
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;