Можно ли избежать нескольких нажатий кнопок на Winform? - PullRequest
2 голосов
/ 06 августа 2009

Предположим, у вас есть кнопка в форме, которая считает в текстовом поле до 1000, а затем очищает ее.

Если я быстро нажму кнопку пять раз (во время выполнения), обработчик события Click будет вызван 5 раз, и я увижу счет до 1000 пять раз.

Можно ли отключить другие нажатия на эту кнопку, пока считается первый щелчок?

Примечание. Отключение кнопки в первом операторе обработчика щелчка, а затем повторное включение в конце не работает. Кроме того, отмена подписки / подписки на событие click (после - = = и + =) не работает.

Вот пример для иллюстрации:

  private bool runningExclusiveProcess = false;

    private void button1_Click(object sender, EventArgs e)
    {
        this.button1.Click -= new System.EventHandler(this.button1_Click);

        if (!runningExclusiveProcess)
        {
            runningExclusiveProcess = true;
            button1.Enabled = false;


            textBox1.Clear();
            for (int i = 0; i < 1000; i++)
            {
                textBox1.AppendText(i + Environment.NewLine);
            }


                runningExclusiveProcess = false;
            button1.Enabled = true;
        }

        this.button1.Click += new System.EventHandler(this.button1_Click);
}

Ответы [ 3 ]

2 голосов
/ 13 декабря 2013

Фрагмент кода здесь:

публичный частичный класс Form1: Form { public int Count {get; задавать; }

    public Form1()
    {
        InitializeComponent();

        this.Count = 0;
    }

    private void GOBtn_Click(object sender, EventArgs e)
    {
        this.GOBtn.Enabled = false;

        this.Increment();

        this.GOBtn.Enabled = true;
    }

    public void Increment()
    {
        this.Count++;
        this.CountTxtBox.Text = this.Count.ToString();
        this.CountTxtBox.Refresh();

        Thread.Sleep(5000);  //long process

    }
}
2 голосов
/ 06 августа 2009

Просто отключите кнопку после первоначального щелчка, запустите таймер на секунду, который на тик снова включит кнопку и сам отключится

0 голосов
/ 16 августа 2009
private bool HasBeenClicked = false;

private void button1_Click(object sender, EventArgs e)
    {
       if( HasBeenClicked )
          Application.DoEvents();
       else {
          HasBeenClicked = true;
          // Perform some actions here...
          }
    }

Это нужно сделать. : О)

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