удерживая значение переменной в c # .net winforms - PullRequest
3 голосов
/ 09 марта 2011

У меня есть форма, в которой есть кнопка, при событии нажатия кнопки переменная locklogin увеличивается на 1

когда locklogin = 3, кнопка формы отключается, и форму необходимо закрыть. при закрытии формы locklogin теряет свое значение.

но я хочу сохранить его значение, хотя форма закрывается, и когда форма запускается снова (все приложение выполняется снова), тогда кнопка все еще отключена. как мне это сделать?

 public partial class Form1 : Form
{
    static int loginlocked;
    static int isloginlocked;
    public Form1()
    {
        InitializeComponent();

        if (isloginlocked == 3)
        {
            foreach (Control c in this.Controls)
            { c.Enabled = false; }

        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        loginlocked++;
        if (loginlocked == 3)
        {
            foreach (Control c in this.Controls)
            { c.Enabled = false; }

            this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);

        }
    }
    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        isloginlocked = loginlocked;
        if (e.CloseReason == CloseReason.UserClosing)
        {

            if (MessageBox.Show(this, "Really?", "Closing...",
                 MessageBoxButtons.OKCancel, MessageBoxIcon.Question)
                == DialogResult.Cancel) e.Cancel = true;
        }
    }
}

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

Ответы [ 5 ]

5 голосов
/ 09 марта 2011

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

Я бы хотел, чтобы объект Controller или Presenter прослушивал событие из вашей формы при нажатии кнопки. Этот объект Controller поддерживает счетчик и отвечает за создание и уничтожение формы и установку начальных значений во время построения, например, отключена ли кнопка. Форма может быть настолько глупой, насколько это возможно, и не нужно беспокоиться о такой бизнес-логике.

Model-View-Controller

Model-View-Presenter

Некоторые обсуждения и примеры

3 голосов
/ 09 марта 2011

Делая переменную static.

Конечно, поскольку вы подразумеваете, что в вашей программе несколько раз будет создаваться новая форма, вам придется установить состояние включения кнопки в конструкторе (после InitializeComponent).

1 голос
/ 09 марта 2011

Создать статическую переменную или простой синглтоноподобный класс со счетчиком. Вместо сброса значения используйте оператор Mod, поэтому locklogin% 3 == 0 закрываете форму. Значение входа в систему блокировки может увеличиваться без потери значения. Вам нужно будет иметь дело с первым использованием переменной (например, locklogin! = 0)

1 голос
/ 09 марта 2011

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

0 голосов
/ 30 июля 2014

вы можете использовать настройки класса.Очень хороший пример можно найти здесь - http://www.codeproject.com/Articles/17659/How-To-Use-the-Settings-Class-in-C

...