2009-03-05 78 views
2

在C#winforms應用程序中在通過另一個窗體打開的表單上持久化數據的常規方法是什麼?我曾計劃將它全部保留在表單對象上,但是當表單關閉時,似乎表單對象被處理掉了。這意味着我放棄了所有的數據。在Win窗體應用程序中持久化表單數據

我可以將表單包裝到另一個將所有數據關閉的對象中,但這似乎很多工作。

有沒有辦法隱藏表單時,它被關閉,而不是處置它?

回答

2

關閉表單不處置。通常這就是數據管理的方式。

Result res; 
    using (MyForm form = new MyForm()) 
    { 
     if(form.ShowDialog()== DialogResult.OK) 
     { 
     // In Myform, after the data collection is done, you can set DialogResult=DialogResult.Ok and close form using form.Close(); 
     res = form.Result; // expose forms data as result.        
     } 
    } 
    UserResult(res); 
2

2種可能性:

1)抓住關閉事件,只是隱藏它。創建函數(隱藏表單)以使用屬性獲取輸入值。

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    this.Visible = false; 
    e.Cancel = true; 
} 

2)什麼司法部告訴:如果您關閉該窗體創建後,表單對象仍然活着,並且可以訪問

我贊成2)+屬性

+0

如此捕捉關閉事件並隱藏它將覆蓋正常行爲並阻止其被丟棄? – 2009-03-05 12:17:46

+0

是你關閉它,它不會被丟棄,只有當它超出範圍 – RvdK 2009-03-05 12:21:10

2

使用公共屬性。

  • 關閉之前,填充這些屬性具有相應的值(即。this._userName = txtUsername.Text)
  • 關閉窗體
  • 在窗體的父對象,仍可以調用對話框。用戶名來讀取值。
0

訪問子窗體的控件它在技術上是可行的,但不是一個好的設計。 以下是我的工作方式:

1)接受/保存按鈕,您將this.DialogResult設置爲「OK」,並獲取所有控件信息。在關閉按鈕或/和關閉事件集this.DialogResult到「取消」

2)如果數據映射到一個對象(可以說「客戶」)...設置對象的屬性。如果沒有,只要將每個控件的數據公開一個屬性,處理所有需要的格式化。

3)使用this.Close();關閉表單不處理它。

4)在你的父表單上檢查是否dialog.ShowDialog()== DialogResult.OK然後訪問你在步驟2中創建的公共屬性......或者如果你用信息加載一個對象只是訪問該對象在表格中(由一個屬性也)

5)那麼調用dialog.Dispose()方法...或者用戶按下確定或取消。

希望這可以幫助你...

1

我建議你建立一個單獨的對象包含數據。您可以以非常簡單的方式將表單控件綁定到其屬性(設計器支持,無需代碼)。這使您的數據與表單分離。

如果你不知道這個文件尚未: How to: Create a Simple-Bound Control on a Windows Form

馬蒂亞斯

1

可以隱藏形式與處置它,但是這是幾乎可以肯定不是你想要的。如果只是隱藏表單,表單會佔用不會被釋放的過程中的資源。如果你處理它們,它們只會消失。當一堆Form實例不被使用時,只是在後面問一個問題。

您可能想要做的是在窗體完成顯示之後但在實際關閉之前從窗體傳回一些結果數據。例如,

MyDataObject data; 
using (var form = new SomeForm()) { 
    var dialogResult = form.ShowDialog(someWindow); 
    data = form.InterestingData; 
} 
相關問題