2014-02-01 1 views
0

У меня есть код, как это в окне формы, C++Увеличения целочисленного значения, сохраняя при этом нажатой кнопке и останавливая при отпускании, в окнах формы

private: System::Void button3_MouseUp(Object^ sender, MouseEventArgs^ e) { 
     _run=false; 
     } 
private: System::Void button3_MouseDown(Object^ sender, MouseEventArgs^ e) { 
     _run = true; 
     MyAction(); 
     } 

private: System::Void MyAction() 
     { 
      while(_run) 
      { 
       i=i+1; 
      System::Console::WriteLine(i); 
      } 
     } 

Мотивации сохранить значение «я» (я является целым числом), до тех пор, пока я не нажму кнопку и не остановлюсь, когда я отпущу кнопку. Но один я нажимаю кнопку, значение i increses и пользовательский интерфейс зависает и никогда не останавливается, У кого-нибудь есть какое-либо предложение решить эту проблему.

+0

Возможный дубликат [RepeatButton for Winforms] (http://stackoverflow.com/questions/3727715/repeatbutton-for-winforms) –

ответ

0

Вам необходимо перекачать контур сообщения в вашем методе MyAction. В C# и VB это было бы что-то вроде Application.DoEvents()

Поскольку это все работает на потоке пользовательского интерфейса, ваш цикл блокирует выполнение чего-либо еще в потоке пользовательского интерфейса, включая насос сообщений. Вызывая Application.DoEvents (или эквивалент C++), вы запускаете насос сообщений окна (wndproc), который обрабатывает оконные сообщения и отправляет события (при необходимости вызывает кнопки 3_MouseUp()).

+0

Мне удалось использовать таймер в форме окна и настроить его для работы с событием MouseDown и остановил его на событии MouseUp – sarath

Смежные вопросы