простой счетчик в окнах форм приложения C ++ - PullRequest
0 голосов
/ 18 мая 2011

Практикуя мой C 2010 против C ++ в Windows Form Applications, я не делал этого в течение очень долгого времени.Я пытаюсь разработать простые приложения, в которых пользователь нажимает кнопку, а затем label1 начинает считать каждый раз, когда пользователь нажимает эту кнопку1.Не уверен, почему label1 не увеличивается на 1. Может кто-нибудь сказать, в чем проблема?Заранее спасибо?

РЕДАКТИРОВАНИЕ Я нашел решение и изменил код.Я постараюсь закрыть ветку и, если не смогу, из-за низких баллов, то попробую завтра.

    namespace Counter 
    {
      int counter = 0;
     //some additional namespaces


    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
         {
           counter++;
           label1->Text = counter.ToString();
                     }

1 Ответ

0 голосов
/ 18 мая 2011

Причина, по которой это не работает, двояка.

  1. Как вы написали это, вы устанавливаете текст метки только один раз , после того как закончите свой «цикл» (*). Таким образом, текст будет изменен только один раз.
  2. Даже если вы перемещаете назначение внутри цикла, вы сохраняете основной поток занятым на протяжении всей функции. Вам нужно создать второй поток и вызвать делегата для изменения текста метки, примерно так (версия C #):

    void StartCounting()
    {
      var thread=new Thread(()=>
      {
        for(int i=0;i<10;++i)
          label1.Invoke((MethodInvoker)()=>{label1.Text=i.ToString();});
      }
    }
    

(*) Как примечание, весь ваш цикл for эквивалентен абсолютно ничему. j никогда не будет меньше i, когда i начинается с 0.

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