簡體   English   中英

如何確定控件是否在 Form C# 之外

[英]How to determine if control is outside of Form C#

我試圖確定動態添加的控件是否在表單之外。

起初,我認為可以通過獲取窗體的高度和動態添加控件的位置來計算它。

但我注意到Control.LocationForm.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM