今天,我使用了很多這些功能,但我已經發現了幾個關於它們的問題。 我的程序是這樣的結構:C# - this.Show(),關閉()和隱藏()不工作或崩潰
這是形式1:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
...
...
edit = new Button();
edit.Click += new EventHandler((s, e) => edit_mode(s, e,x,y,c,z)); //x, y, c, z are some variables that I need to pass to purposes of this software.
this.Controls.Add(edit);
}
void edit_mode(object sender, EventArgs e, string x,string y, int c, int z)
{
...
...
Form edits = new Form4();
edits.Show();
this.Hide();
}
}
,這是表格4:
public partial class Form4 : Form
{
public Form4()
{
InitializeComponent();
...
...
...
Form backs= new Form1();
backs.Show();
this.Close();
}
此片的目標是如下:當我輸入「edit_mode」函數,Form1必須消失才能顯示一個新的Form(Form4)。
我在這裏搜索了很多,但沒有解決方案爲我工作:編譯器不報告我的錯誤,所以當我調試這段代碼似乎工作;但是當它到達edits.Show(); (在Form1中)它說:ObjectDisposedException錯誤,我不明白爲什麼。 我試圖用this.Hide()取代this.Close(),程序運行良好,直到執行Form4的this.Hide()函數: 實際上,當Form4出現並執行其代碼時,它會停止本身this.hide()和form4不會消失(同時出現Form1)。 我也試過在form4中創建一個按鈕,並在這裏移動代碼來打開Form1 ..它的工作原理非常棒!但我只有一個問題:我不希望用戶按下按鈕來使其工作。 所以我需要自動執行這個「表單更改」。
有關這個問題的任何想法?
爲什麼你需要創建並顯示一個窗體(Form4),然後試圖關閉它的構造函數? ....中的代碼不能被Form1直接調用的類方法替換? – Steve
除了史蒂夫所說的......你正在創建一個Form1的新實例。如果要顯示已經初始化的Form1,則必須在顯示Form4之前添加Owner屬性:edits.Owner = this;然後從Form4中顯示出來你做這個.Owner.Show(); –
如果您嘗試在處置對象中執行某些操作,則會發生ObjectDisposedException。調用Close方法後,您不能調用Show方法,因爲表單的資源已經被處置。而你爲什麼試圖關閉窗體構造函數中的窗體? – ssakash