2012-08-14 17 views
0

我有一個主窗體(Form1)和一個輔助窗體(AddProd)。在Form1上,我有一個打開AddProd的按鈕。這是事件代碼。如何重新打開封閉表單而不丟棄錯誤或保留以前的數據?

private void button69_Click(object sender, EventArgs e) 
    { 
     pIdVal = Convert.ToInt32(dataGridView2.SelectedRows[0].Cells[0].Value); 
     editAdd = true; 
     addProd.Show(); 
    } 

「pIdVal」是一個int值,表示要顯示的所選記錄的ID。 「editAdd」是一個布爾值,如果用戶希望編輯所選信息或添加新信息,它將告訴AddProd。

我遇到的問題是,當用戶在編輯,添加或取消之後關閉AddProd時,如果使用this.Close(),表單將變爲處置狀態。除非我重新啓動整個程序,否則不允許AddProd再次打開。如果我嘗試重新打開它,我收到並顯示「無法訪問處置的對象」錯誤消息。 對象名稱:'AddProd'。「我也試着用this.Hide()代替this.Close()。它使我避免了處置錯誤。但是,如果我選擇一條新記錄,然後再次打開AddProd,則先前選擇的記錄中的數據仍在文本框中。

爲了更好地理解我的問題。 Form1顯示產品的dataGridView供用戶查看。用戶可以選擇一行數據進行編輯,或者用戶可以添加一行新的數據。一旦用戶選擇了一行,他們然後按Edd/View(button69)按鈕。這將打開添加選定行數據的文本框的AddProd。一旦用戶編輯或查看數據並關閉AddProd,他們選擇了不同的行並再次按Edd/View按鈕。只有這一次,顯示的數據是先前選擇的行的數據,而不是當前選擇的行。當然,除非我使用this.Close()。在這種情況下AddProd不會重新打開,它只是錯誤。

對不起,如果我有點重複。我只是想確保這個問題沒有問題。任何幫助?

+1

'button69',嚴重?你有沒有給你的控制名稱? – 2012-08-14 20:25:05

+0

說實話,不是真的。我知道我不應該那樣做,但我已經習慣了。我使用評論和展示位置來識別我的代碼。我不喜歡麻煩命名每一個按鈕和文本框。我的程序中有超過280個文本框,並有100多個按鈕。這只是主要的形式。 – woods 2012-08-14 20:32:44

+0

呃,那就更有理由給他們起個名字......只有數字,知道控制是什麼的唯一方法就是打開設計師,這是一種痛苦。通過查看代碼無法猜測。 – 2012-08-14 20:34:29

回答

0

只需創建AddProd的新實例:

private void button69_Click(object sender, EventArgs e) 
{ 
    pIdVal = Convert.ToInt32(dataGridView2.SelectedRows[0].Cells[0].Value); 
    editAdd = true; 
    AddProd addProd = new AddProd(); 
    addProd.Show(); 
} 
+0

我試過了,但是當AddProd打開時,文本框不會顯示數據。我忘了在上面提到。但我明天再試一次,我不得不叫它今天不幸。 – woods 2012-08-14 20:40:03

+0

問題修復。我公開AddProd_Load。在按鈕代碼中,我添加了addProd.AddProd_Load(發件人,e),每次單擊按鈕時都會重新加載表單。 – woods 2012-08-15 17:46:21

相關問題