[英]How to determine if control is outside of Form C#
我試圖確定動態添加的控件是否在表單之外。
起初,我認為可以通過獲取窗體的高度和動態添加控件的位置來計算它。
但我注意到Control.Location
和Form.Height
沒有“任何”共同點。
我不認為我真的了解高度和位置之間的相關性。
例如:
我想如果你的表單的高度為 500,我把控件放在表單的底部,它應該給出 Location: X, 500(X 是寬度,這里不相關)。 但這不正確,它顯示給我例如:X, 465。我錯過了什么嗎?
所以我需要能夠識別控件是否在表單之外,即使它只是一個像素。
我在這里找到了幾個類似的問題,但不幸的是,這並沒有真正給我我需要的答案。
那么,有沒有辦法做到這一點? 可以計算嗎?
該Height
的形式還包括標題欄和邊框的高度。 您可以使用表單的ClientSize
:
從MSDN上的文檔:
窗體客戶區的大小是窗體不包括邊框和標題欄的大小。 窗體的客戶區是窗體內可以放置控件的區域。 在執行圖形操作或在窗體上調整大小和定位控件時,您可以使用此屬性來獲取正確的尺寸。 要獲取整個表單的大小,請使用 Size 屬性或使用單獨的屬性 Height 和 Width。
控件的位置是相對於它的容器,所以(0,0)
是窗體內的左上角。
我知道這是一個較舊的線程,但您可以嘗試使用此方法:
public static bool IsOutofBounds(Form form, Control control)
{
int controlEnd_X = control.Location.X + control.ClientSize.Width;
int controlEnd_Y = control.Location.Y + control.ClientSize.Height;
if (form.ClientSize.Width < controlEnd_X || form.ClientSize.Height < controlEnd_Y)
{
return true;
}
else
{
return false;
}
}
它用於檢查控件是否超出其父窗體的范圍。
您可以使用此代碼來檢查控件是否在表單內:
var Inside = frm.ClientRectange.Intersect(ctrl.Bounds) == ctrl.Bounds;
表單的左上角是 (0,0) 右下角是 (formHeight, fromWidth)。 要檢查表單上的兩個文本框的位置,並在鼠標移動事件中編寫此代碼以查看 x 和 y 的變化。
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
textBox1.Text = e.X.ToString();
textBox2.Text = e.Y.ToString();
}
請注意,從表單邊緣返回的數字與您選擇的大小之間存在差異。 在我的 500*500 表格中,它實際上是 460*483。 對於任何邊框樣式和任何分辨率,差異總是相同的。
要在表單上放置控件,請使用表單中的位置結構或使用控件的 top 和 left 屬性; 上 = x,左 = y。 記住您測量的實際高度和寬度的偏移量以及控件的尺寸。 要在右下角添加一個尺寸為 80*30 的按鈕,我會這樣做:
button1.Location = new System.Drawing.Point(402, 430);
左下角:
button1.Location = new System.Drawing.Point(0, 430);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.