2016-02-13 81 views
0

我已經在c#中開發了Windows應用程序,其中我有一個panelBox內的pictureBox。我已經應用了放大和縮小功能。現在我想讓pictureBox中的圖像平移。我在pictureBox上應用了mouseDown,mouseMove和mouseUp事件。它的代碼是:平移圖片框中的圖像不起作用

private void pictureBox2_MouseDown(object sender, MouseEventArgs e) 
{ 
    if (pflag == 1) 
    { 
     dragging = true; 
     start = e.Location; 
    } 
} 

private void pictureBox2_MouseMove(object sender, MouseEventArgs e) 
{ 
    // panning code 
    if (pflag == 1) 
    { 
     if (dragging && zoom == 1) 
     { 
      pictureBox2.Location = new Point(pictureBox2.Left + (e.Location.X - start.X), pictureBox2.Top + (e.Location.Y - start.Y)); 
     } 
    } 
} 

private void pictureBox2_MouseUp(object sender, MouseEventArgs e) 
{ 
    if (pflag == 1) 
    { 
     dragging = false; 
    } 
} 

這裏圖像是平移但沒有邊界控制。有時即使圖像在平移時也會在面板區域下方。我需要的是,圖像應根據縮放因子移動頂部,左側,右側,底部,即滾動條的工作方式,而不是超出此範圍。

回答

0

您不需要擔心縮放,因爲鼠標座標會很好。所示像素的距離應與光標正在移動的距離相同。

您也並不真的需要dragging變量,除非您將其用於別的東西。

然而,你需要在MouseMove檢查鼠標按鈕:

if (pflag == 1 && e.Button == System.Windows.Forms.MouseButtons.Left ) 

待辦事項幾件事情:

  • 用戶預計了現場,他拖住宿與鼠標光標就像像素觸摸 sh應該總是隨着指尖移動。不要通過縮放縮放係數來讓他感到驚訝!

  • 如果你想這樣做,你將需要使用一個因素,不加入數量。

  • 是,滾動條會因素,在變焦也是電梯仍然將留用鼠標!

這裏是一個如何設置限制以防止用戶走得太遠的例子。它有點牽扯,因爲它在放大或縮小時需要工作。不要從非法職位開始,但在縮放時也不要進入這些職位!

// panning code 
if (pflag == 1 && e.Button == System.Windows.Forms.MouseButtons.Left ) 
{ 
    { 
     Rectangle panRect = new Rectangle(panel1.Location, panel1.ClientSize); 
     Rectangle picRect = new Rectangle(pictureBox2.Location, pictureBox2.ClientSize); 
     int newLeft = pictureBox2.Left + (e.Location.X - start.X); 
     int newTop = pictureBox2.Top + (e.Location.Y - start.Y); 
     int newRight = newLeft + picRect.Width; 
     int newBottom = newTop + picRect.Height; 

     if ((newLeft < 0 && newRight < panRect.Width) 
     || (newLeft > 0 /*&& newRight > panRect.Width */)) newLeft = picRect.Left; 

     if ((newTop < 0 && newBottom < panRect.Width) 
     || (newTop > 0 /*&& newBottom > panRect.Height*/)) newTop = picRect.Top; 

     pictureBox2.Location = new Point(newLeft, newTop); 
    } 
    Text = "" + pictureBox2.Location; 
} 

請注意我已註釋的兩部分!因爲它不能移動小於視口的圖片;你可以通過刪除註釋來允許它,但是應該在放大時將它放大並保持爲零,因爲它應該永遠不會坐在位置範圍內並且也會與重疊,否則滾動條會以怪異方式行爲..!

+0

我試着根據你的評論更新代碼,但仍然是同樣的問題。實際上,在放大時我增加了我的pictureBox尺寸,但面板尺寸保持不變。當我縮放圖像後平移圖像時,圖像框位置將不受限制地改變。我希望根據面板大小加上縮放因子說明30。如果我正在平移,超出該限制,不應移動pictureBox/image。該功能應該像滾動條。超出垂直和水平滾動條的限制時,圖像不應移動或移動。 –

+0

_我想要根據面板大小加上縮放因子說30。這沒有任何意義!平移總是應該跟着鼠標,不要更快或者離開它! _功能應該像滾動條._它應該在另一個方向,對吧?如果你想限制它,你只需要將它添加到代碼中。除此之外,它在這裏工作得很好:它的工作方式與觸摸屏完全相同,當我將圖像拖動到左側時,它跟隨着指尖/鼠標。 – TaW

+0

您能否幫我解決一些代碼以增加限制? –