我在Delphi Prism for 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是一個窗口窗體,它是類的一部分很像一個全局變量,爲什麼窗口窗體在打開後關閉它時會放置。它是否保存在內存中,直到整個程序關閉以方便訪問?
UPDATE: 在onFormClosing,我隱藏的形式和它似乎工作,但是當我再次嘗試重新打開窗體,它會引發同樣的異常像以前「無法訪問釋放的對象。」
method UnitForm.UnitForm_FormClosing(sender: System.Object; e: System.Windows.Forms.FormClosingEventArgs);
begin
hide;
end;
我明白了。有意義,但是如果你點擊系統菜單按鈕上的x就會發生什麼。這在窗口的右上角。你如何觸發? – ThN
OnFormClosing事件是您可以反應的地方。 FormClosingEventArgs有可能取消該事件,您可以改爲在此處調用隱藏。當然,只有當你不想實際關閉和處理窗口時,你才應該取消事件。 –
@塞巴斯蒂安:FWIW,在德爾福,你可以在沒有釋放它的情況下關閉表格。這是一個屬性設置。 –