Есть ли что-то как СЕССИЯ в Приложении Windows?

Есть ли что-то как СЕССИЯ в Приложении Windows? Я хочу сохранить несколько значений, чтобы быть персистентным между формами.

Например: Первая форма имеет некоторые флажки, и третья форма обрабатывают их соответственно. Таким образом, я должен сохранить проверенные флажки где-нибудь.

5
задан Manish 29 March 2010 в 12:06
поделиться

6 ответов

Вы могли бы отображать состояние CheckBoxes Checked только через свойства этой формы, на которой вы разместили CheckBoxes, и получать доступ к этим свойствам из третьей формы или формы процесса.

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 заключается в том, что Web не имеет статических данных. SESSION и VIEWSTATE - это обходные пути, позволяющие сохранять значения.

WinForms - stateful, поэтому вам не нужно использовать переменные типа SESSION и VIEWSTATE. Значение сохраняется до тех пор, пока существует объект.

3
ответ дан 13 December 2019 в 05:32
поделиться

Если вы говорите о разных формах в одном приложении, просто создайте несколько статических членов в классе, они будут сохраняться в течение всего времени существования исполняемого файла.

5
ответ дан 13 December 2019 в 05:32
поделиться

Вы можете использовать app.config (или раздел настроек в свойствах проекта), если вы используете Visual Studio, или просто сериализовать свои значения и сохранить их в каком-либо файле.

2
ответ дан 13 December 2019 в 05:32
поделиться

Если вы хотите сохранять данные между независимым выполнением одного и того же приложения (как при обслуживании параллельных запросов в ферме HTTP), просто напишите некоторый XML или используйте систему объединения / сериализации с вашей средой выполнения / платформой (не знаю, что бы она быть для C #).

Затем импортируйте его снова. Просто следите за своим контролем параллелизма.

1
ответ дан 13 December 2019 в 05:32
поделиться

Если это обычное однопользовательское приложение 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
}

Вы могут использовать статические переменные вместо экземпляров - но это просто глобальные переменные, которые затрудняют чтение и поддержку вашего кода.

1
ответ дан 13 December 2019 в 05:32
поделиться

Если вы хотите хранить данные на пользователя между сеансами выполнения, вам следует рассмотреть возможность изолированного хранилища.

  • Не загромождает каталог установки
  • Не вызывает проблем с программным обеспечением AnitVirus
  • Часть ОС, включая объекты .Net, не нужно ничего устанавливать
  • Уже работает с моделью безопасности Windows
  • Существует на пользователя,поэтому сохраненные настройки разделены для каждого пользователя
  • Можете сериализовать/десериализовать obects непосредственно в него
0
ответ дан 13 December 2019 в 05:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: