2011-11-24 4 views
0

마우스 다운 이벤트로 사각형의 크기를 늘리는 방법은 무엇입니까? 마우스에마우스 다운 이벤트가있는 사각형의 크기가 항상 증가합니까?

private void btnPlus_MouseDown(object sender, MouseEventArgs e) 
{ 
    rect.Width = rect.Width + 1; 
    rect.Height = (int)(((rect.Width)/4) * 3); 

    label1.Text = rect.Width.ToString(); 
    label2.Text = rect.Height.ToString(); 

    pictureBox1.Invalidate(); 
} 
+0

: 당신은 윈폼을 사용하는 가정

, 그 같을 것이다? – thumbmunkeys

+1

귀하의 질문은 무엇입니까? 제공 한 코드에 문제가 있습니까? –

+0

네, 한 번 incerase, 그리고 그게 전부입니다, 내가 마우스를 계속하는 동안 증가 싶어요 – gormit

답변

2
  1. 아래 당신은 당신이 당신의 코드를 실행 타이머 틱에 타이머
  2. 를 시작합니다.
  3. 마우스를 올리면 타이머가 중지됩니다.
1

당신이 버튼에 손가락을 유지하더라도, 마우스 버튼을 클릭하면 MouseDown 이벤트는 한 번만라고되고있다.

손가락으로 버튼을 누르고있는 동안 작업을 계속하려면 MouseDown 이벤트에 새 스레드를 만들고 MouseUp 이벤트에서 종료하십시오.

private Thread _increaseWidthThread; 
private Boolean _endThreadFlag; 

private void btnPlus_MouseDown(object sender, MouseEventArgs e) 
{ 
    _endThreadFlag = false; 
    increaseWidthThread = new Thread(() => IncreaseWidth); 
} 

private void btnPlus_MouseDown(object sender, MouseEventArgs e) 
{ 
    _endThreadFlag = true; 
} 

private void IncreaseWidth() { 
    while (!_endThreadFlag) { 
     this.Invoke((MethodInvoker) delegate { 
      rect.Width = rect.Width + 1; 
      rect.Height = (int)(((rect.Width)/4) * 3); 

      label1.Text = rect.Width.ToString(); 
      label2.Text = rect.Height.ToString(); 

      pictureBox1.Invalidate(); 
     }); 
    } 
} 

내가 그것을 중지해야 할 때 스레드를 표시하는 플래그를 사용하고 스레드에서 GUI를 업데이트 할 수있는 익명의 방법 : 당신이 증가를 수행하는 경우 스레드에서는 while 루프를 수행합니다.


편집

대신 스레드를 사용하여, 안드레이에 의해 제안으로 timer를 사용하는 것이 어쩌면 더 나은 (간단)입니다. 타이머 간격을 설정하여 증가의 "감도"를 조절할 수 있습니다. 무엇을 작동하지

private System.Windows.Forms.Timer _timer; 

public ClassConstructor() { 
    _timer = new System.Windows.Forms.Timer(); 
    _timer.Interval = 100; // Set the "sensitivity" 
    _timer.Elapsed += new ElapsedEventHandler(OnTimer); 
} 

private void btnPlus_MouseDown(object sender, MouseEventArgs e) 
{ 
    timer.Start(); 
} 

private void btnPlus_MouseDown(object sender, MouseEventArgs e) 
{ 
    timer.Stop(); 
} 

private void OnTimer(object sender, ElapsedEventArgs e) { 
    rect.Width = rect.Width + 1; 
    rect.Height = (int)(((rect.Width)/4) * 3); 

    label1.Text = rect.Width.ToString(); 
    label2.Text = rect.Height.ToString(); 

    pictureBox1.Invalidate(); 
} 
관련 문제