2013-03-01 34 views
0

在Windows窗體應用程序中,我創建了一個圖形框或橢圓,我希望這個圖形不會從窗體中移出,當我開始在運行時移動它時,方式我得到這個想法來實現是獲得形式的X和Y座標,並從我的圖形對象的x和y座標匹配,但它不能正常工作,我認爲形式的x和y座標不正確。我發現問題獲取窗體的座標以阻止圖形穿過它

以下是我用來檢測圖形是在窗體內部還是在窗體外部的代碼。

float formX = this.Location.X; 
float formY = this.Location.Y; 
float formWidth = this.Width; 
float formHeight = this.Height; 

// x = my graphic x's coordinates 
// y = my graphic y's coordinates 
// width = the width of my graphic or the x2 values of my graphic 

if ((x > (formX + formWidth) || ((x + width) > (formX + formWidth)) 
    return true; 
else 
    return false; 

我這裏所說的簡單的代碼,並只與x軸,它不能正常工作的(formX + width)較大,即使在圖形形式的角落都顯示。

我希望你明白了我的觀點,請建議做些什麼來擺脫這一點。

回答

0

當圖像離開窗體的左邊緣時,相關邊的x座標將小於formX。當它關閉窗體的右側,這將是比formX + formWidth越大,所以在條件上半年比較是南轅北轍 - 並比較錯誤的值:

if ((x < formX) || ((x + width) > (formX + formWidth))) 
    return true; 
else 
    return false; 

至少,我假設這就是你想要的,有可能邏輯與你之後的內容相反,但這很容易修復。

您還可以清理咯,因爲不需要的if-else語句:

return (x < formX) || ((x + width) > (formX + formWidth)); 
+0

感謝我過我的條件應答,但格尼爾,我得到它,以及你在說什麼,但實際上問題是formX(表單左邊緣)的值是175,這對我來說是問題,它不應該是零?如果不是y?請讓我知道 – 2013-03-01 10:04:24

+0

從http://msdn.microsoft.com/en-us/library/ms159414.aspx:Form.Location獲取或設置代表屏幕座標*中表單**左上角的Point * *。換句話說,它是左手邊緣與屏幕左手邊緣的距離。 – RoadieRich 2013-03-01 10:10:43

+0

我不知道你使用的圖形庫是什麼,但是你需要弄清楚你正在移動的圖形的x和y是相對於屏幕還是表單 - 如果是後者,那麼你需要將它與'0'和'formWidth'進行比較。 – RoadieRich 2013-03-01 10:13:45