2015-05-26 115 views
0

當我試圖在可以滾動的面板上繪製一個矩形時,我不知所措。矩形繪製在網格上,所以它們的起始位置四捨五入到最接近的50px。
繪製矩形時,繪製位置在滾動後相對於網格線不正確。
然而,當網格在繪製後滾動時,它會隨着面板一起滾動。滾動的鼠標座標不正確

我試圖抵消鼠標的座標(我正在使用mouseDown,Move和Up事件),但無濟於事。每個矩形都在鼠標下方繪製,然後向右拖動,直到釋放完成繪圖(繪製並隨着鼠標移動增加尺寸)。以下是一部分的五月的事情,我已經厭倦了

Point screenPos = new Point(MousePosition.X, MousePosition.Y); 
Point relLocation = grid.PointToClient(screenPos); 

Point relLocation = e.Location; 
relLocation.Offset(AutoScrollPosition); 

enter image description here

+0

當你只滾動窗口的一小部分失效。真正的問題是,如果你隱藏窗口並重新恢復,窗口是否在這種情況下正確繪製?順便說一句,我們需要更多的繪圖邏輯。 –

+0

您也可以通過在表單上放置2個文本框並簡單地將您計算的x和y位置的值存儲在relLocation中來幫助自己,以便您可以直觀地檢查它們是否有意義。 –

+0

我添加了一個截圖,並將更新繪圖邏輯的更多信息 – Nick

回答

0

下面是一個使用網格和滾動位置的鼠標事件的計算:

int grid = 50; 
    int x = e.X - (yourPanel.HorizontalScroll.Value/grid) * grid ; 
    currentPoint = new Point((x/grid) * grid , (e.Y/grid) * grid); 

不知道如何恰好你正在繪圖,因爲你沒有向我們顯示代碼,但是這應該會發現一個位置,即目前在你的網格上..

我沒有包括滾動垂直,但你的想法..

+0

謝謝,我主要得到它的工作(需要一些更無關的調整)。就像你所建議的那樣,'yourPanel.Horizo​​ntalScroll.Value'就像我之前所做的那樣,討厭沒有內置函數來做到這一點! – Nick