2010-03-29 24 views
5

Có điều gì giống như SESSION trong ứng dụng Windows không? Tôi muốn lưu trữ một vài giá trị để liên tục giữa các biểu mẫu.Có điều gì giống như SESSION trong ứng dụng Windows không?

Ví dụ: Biểu mẫu đầu tiên có một số hộp kiểm và biểu mẫu thứ ba xử lý chúng tương ứng. Vì vậy, tôi cần lưu trữ các hộp kiểm đã chọn ở đâu đó.

+0

Sẽ giúp ích nếu bạn có thể đưa ra ví dụ về những gì bạn đang cố gắng đạt được.Bạn có muốn lưu trữ giá trị cho mỗi người dùng trong "phiên" và liệu dữ liệu có tồn tại trong suốt thời gian của quá trình không? –

Trả lời

3

Bạn chỉ có thể hiển thị hộp kiểm Kiểm tra trạng thái thông qua các thuộc tính của biểu mẫu này, nơi bạn đặt Hộp kiểm của mình và truy cập các thuộc tính này từ biểu mẫu Thứ ba hoặc Quy trình của bạn.

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. 
    } 
} 

Hãy xem xét rằng tôi đã chọn mã này lên trên đầu của tôi, vì vậy nó có thể không xảy ra để biên dịch. Dù sao, tôi hy vọng rằng điều này mang lại cho bạn một ý tưởng về cách vượt qua các giá trị của bạn trong các biểu mẫu của bạn.

Sự khác biệt lớn nhất giữa lập trình Web và WinForm là Web là không trạng thái. SESSION và VIEWSTATE là cách giải quyết để cho phép người dùng duy trì các giá trị.

WinForms là trạng thái, vì vậy bạn không cần phải trải qua các biến giống như SESSION và VIEWSTATE. Giá trị được duy trì miễn là đối tượng tồn tại.

+0

+1 cho tất cả hai đoạn văn quan trọng cuối cùng. –

+0

+1 cho cùng một ... – Manish

5

Nếu bạn đang nói về các Biểu mẫu khác nhau trong cùng một Ứng dụng, thì chỉ cần tạo một số thành viên tĩnh trên một lớp, nó sẽ được duy trì trong suốt thời gian thực thi.

+0

Tôi nghĩ anh ấy muốn các giá trị chia sẻ giữa các phiên bản khác nhau. Giải pháp này chỉ liên quan đến một thực thi. –

1

Nếu bạn muốn duy trì dữ liệu giữa việc thực thi độc lập cùng một ứng dụng (như yêu cầu đồng thời phân phối trong trang trại HTTP) thì chỉ cần viết một số XML hoặc sử dụng hệ thống mashalling/serializing với thời gian chạy/plaform của bạn (dunno nó sẽ dành cho C#).

Sau đó, nhập lại. Chỉ cần xem kiểm soát đồng thời của bạn.

2

Bạn có thể sử dụng app.config (hoặc phần Cài đặt trong Thuộc tính của dự án) nếu bạn sử dụng Visual Studio hoặc chỉ cần sắp xếp các giá trị của bạn và lưu trữ chúng trong một số tệp.

0

Nếu bạn đang tìm cách lưu trữ dữ liệu trên cơ sở mỗi người dùng giữa các phiên thực thi, bạn nên xem xét Bộ nhớ riêng.

  • Không lộn xộn cài đặt thư mục
  • Không gây ra vấn đề với phần mềm AnitVirus
  • Một phần của hệ điều hành bao gồm cả đối tượng Net, không cần phải cài đặt bất cứ điều gì khác
  • Đã làm việc với cửa sổ mô hình bảo mật
  • Tồn tại trên một cơ sở cho mỗi người dùng, thiết lập để lưu được tách ra cho mỗi người dùng
  • thể serialize/deserialize obects trực tiếp vào nó
1

Nếu đây là chỉ là một single-user cửa sổ ứng dụng thông thường, tạo ra một lớp để mô hình trạng thái bạn muốn vượt qua xung quanh và yêu cầu nó trong hình thức nhà thầu của bạn:

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 
} 

Bạn thể sử dụng các biến tĩnh thay vì các trường hợp - nhưng đó chỉ là các biến toàn cầu làm cho mã của bạn khó đọc và duy trì hơn.

+0

+1 giải pháp của bạn là giải pháp thứ hai tôi nghĩ đến. Cảm ơn bạn đã upvote. =) –

Các vấn đề liên quan