2017-11-09 6 views
1

マウスでパネル内のピクチャボックスを移動する方法。 Visual Studio 2015 C#Winsowsフォームアプリケーション。マウスでパネル内のピクチャボックスを移動する方法

私はWindowsMediaPlayerの音量を制御するための基本的なスライダーを作っています。 背景はパネル、内側はpictureBoxがスライダーknopfです。 それはうまく動作します。 しかし、純粋に視覚的にはそれはうまく動作しません。

I'vはすべて検索しましたが、この少し面白い問題の答えは見つかりません。私は少しパネルのエッジのうち、ピクチャボックスを移動すると

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はそのサイズを復元します。

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がパネルから引き出されたとき、修正するために「場合」配置する必要があります。 そして、ちらつきを避けるために、私は 'ドラッグ= false'を入れなければなりませんでした。 しかし、それはpictureBox1が縁に凍っているので、マウスを放してから、もう一度クリックして続行する必要があります。

しかし、よく - それは一緒に暮らすことです。

ありがとうございました。

関連する問題