2017-11-09 7 views
1

마우스로 패널 내에서 pictureBox를 이동하는 방법. Visual Studio 2015 C# Winsows Forms 응용 프로그램.마우스로 패널 내 pictureBox를 이동하는 방법

필자는 WindowsMediaPlayer의 볼륨을 제어하기위한 기본 슬라이더를 만들었습니다. 배경이 패널이고 내부가 pictureBox 인 경우는 slider-knopf입니다. 그리고 잘 작동합니다. 그러나 순전히 시각적으로는 그 점이 좋지 않습니다.

I'v가 모두 검색되었지만이 작은 재미있는 문제에 대한 답을 찾을 수 없습니다. 나는 작은 패널의 가장자리 밖으로에 PictureBox를 이동하면

int posY; 

    private void pictureBox1_MouseDown(object sender, MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Left) 
     { 
      posY = e.Y; ; 
     } 
    } 

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e) 
    { 
     PictureBox box = sender as PictureBox; 

     if (e.Button == MouseButtons.Left) 
     { 
      box.Top += e.Y - posY; 
     } 

     if (box.Top < 0) 
     { 
      box.Top = 0; 
     } 

     if (box.Top > 100) 
     { 
      box.Top = 100; 
     } 
     int n = box.Top; 
     n = n * - 1 + 100; 
     label1.Text = n.ToString(); 
    } 

에서, PictureBox를 어떻게 든 패널에서 '축소'

여기 내 코드입니다. 그러나 마우스를 놓으면 pictureBox의 크기가 복원됩니다. 왜 그

Slider.gif

입니다.? 어떻게 피할 수 있습니까?

감사합니다.

답변

0

해결책을 찾았습니다. 최적이 아니지만 사용할 수 있습니다. 나는에 코드를 변경 :

private void pictureBox1_MouseDown(object sender, MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Left) 
     { 
      dragging = true; 
      startPoint = e.Location; 
     } 
    } 


    private void pictureBox1_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (dragging) 
     { 
      Debug.WriteLine("mousemove X: " + e.X + " Y: " + e.Y); 
      pictureBox1.Location = new Point(0, pictureBox1.Top + e.Location.Y - startPoint.Y); 

      if (pictureBox1.Location.Y < 0) 
      { 
       pictureBox1.Location = new Point(0, 0); 
       dragging = false; 
      } 
      if (pictureBox1.Location.Y > 100) 
      { 
       pictureBox1.Location = new Point(0, 100); 
       dragging = false; 
      } 
      this.Refresh(); 
     } 
     int n = pictureBox1.Location.Y; 
     n = n * -1 + 100; 
     label1.Text = n.ToString(); 

     mediaPlayer1.settings.volume = n; 
    } 


    private void pictureBox1_MouseUp(object sender, MouseEventArgs e) 
    { 
     dragging = false; 
    } 

gif

나는 여전히 둘 필요가 수정하는 '경우'는 pictureBox1이 패널에서 철수 할 때. 그리고 깜박임을 피하기 위해 나는 '끌기 = 거짓'을 넣어야했습니다. 그러나 pictureBox1이 가장자리에 얼어 붙어 있으므로 마우스를 놓은 다음 다시 클릭하여 계속해야합니다.

하지만 잘 사는 것입니다.

감사합니다.

관련 문제