2010-03-29 105 views
5

在Windows應用程序中是否有類似SESSION的東西?我想存儲一些值,以便在表單之間持久存在。在Windows應用程序中是否有類似SESSION的東西?

例如:第一種形式具有一些複選框和第三形式處理它們相應。所以我需要將選中的複選框存儲在某個地方。

+0

如果你能舉出你想要達到的目標,這將有所幫助。您是否希望將每個用戶的值存儲在「會話」中,並且數據是否應該在流程的整個生命週期中存活? – 2010-03-29 11:42:05

回答

3

您只能通過此表單的屬性顯示您的CheckBoxes選中狀態,您可以在其上放置CheckBox並從第三個或Process表單訪問這些屬性。

public partial class MainForm : Form { 
    // We assume we have let's say three CheckBoxes named chkFirst, chkSecond and chkThird 
    public bool IsFirstChecked { get { return chkFirst.Checked; } } 
    public bool IsSecondChecked { get { return chkSecond.Checked; } } 
    public bool IsThirdChecked { get { return chkThird.Checked; } } 

    // Calling this form from where these checked states will be processed... 
    // Let's suppose we have to click a button to launch the process, for instance... 
    private void btnLaunchProcess(object sender, EventArgs e) { 
     ProcessForm f = new ProcessForm(); 
     f.Parent = this; 
     if (DialogResult.OK == f.ShowDialog()) { 
      // Process accordingly if desired, otherwise let it blank... 
     } 
    }  
} 

public partial class ProcessForm : Form { 
    // Accessing the checked state of CheckBoxes 
    private void Process() { 
     if ((this.Parent as MainForm).FirstChecked) 
      // Process according to first CheckBox.Checked state. 
     else if ((this.Parent as MainForm).SecondChecked) 
      // Process according to second CheckBox.Checked state. 
     else if ((this.Parent as MainForm).ThirdChecked) 
      // Process according to third CheckBox.Checked state. 
    } 
} 

請考慮一下,我把這段代碼放在頭頂,所以可能不會編譯。無論如何,我希望這可以讓你瞭解如何在你的表格中傳遞你的價值。

Web和WinForm的編程之間最大的區別是,網絡是無狀態的。 SESSION和VIEWSTATE是解決方法,可以保留值。

的WinForms是有狀態的,所以你不需要去通過SESSION和VIEWSTATE樣的變量。只要對象存在,值就會被保留。

+0

+1爲最重要的最後兩段。 – 2010-03-29 21:16:05

+0

對於相同的+1 ... – Manish 2010-03-30 06:07:05

5

如果你在談論同一個應用程序中不同的形式,然後就在一個類中創建一些靜態的成員,它將持續了可執行的壽命。

+0

我認爲他希望在不同實例之間共享值。該解決方案只涉及一個可執行文件 – 2010-03-29 11:58:12

1

如果你想在同一個應用程序的獨立執行之間持久保存數據(就像在HTTP服務器中併發請求服務一樣),那麼只需寫出一些XML或者在你的運行時/平臺上使用一個mashalling/serializing系統(不知道它是什麼將用於C#)。

然後再次導入。只要注意你的併發控制。

2

如果您使用Visual Studio,則可以使用app.config(或Project的Properties中的Settings部分),或者只是序列化值並將它們存儲在某個文件中。

0

如果您正在尋找將數據存儲在執行會話之間的每用戶的基礎上,應考慮隔離儲存。

  • 不雜亂的安裝目錄
  • 不能與AnitVirus軟件引起的問題
  • 的操作系統,包括.NET對象的一部分,不需要安裝任何軟件
  • 已經與作品Windows安全模式
  • 存在於每個用戶的基礎,所以保存的設置分離爲每個用戶
  • 可以序列化/反序列化obects直接進入它
1

如果這只是一個普通的單用戶的Windows應用程序,創建一個類來要繞過並要求其在窗體構造模型的狀態:

internal class ApplicationState 
{ 
    // Store the selected checkbox values here, for example 
    public List<int> SelectedProductIds { get; } 
    // ... additional state ... 
} 

internal class EditOrderForm: Form 
{ 
    private ApplicationState applicationState; 
    public EditCustomerForm(ApplicationState applicationState) { 
     this.applicationState = applicationState; 
    } 
    // Rest of the code 
} 

可能使用靜態變量而不是實例 - 但這些只是全局變量,使您的代碼難以閱讀和維護。

+0

+1您的解決方案是我想到的第二個解決方案。感謝您的支持。 =) – 2010-03-30 01:21:25

相關問題