2016-03-08 168 views
0

我有一個用戶窗體,其尺寸(h * w)爲180 * 240。對於這個用戶窗體控件將被添加UserForm_Initialize()事件基於大量的用戶輸入後,用戶窗體將被調整大小。我遇到的問題是,用戶窗體的可見範圍小於實際範圍。爲了證明我已經插入用下面的代碼的第二用戶窗體:VBA用戶窗體可見範圍

Private Sub UserForm_Initialize() 
    Dim ctrl As Control 
    Dim i As Integer 

    For i = 1 To 2 
     Set ctrl = Me.Controls.Add("Forms.Label.1") 
     With ctrl 
      Debug.Print .Name 
      .Caption = i 
      .BorderStyle = 1 
      .Height = 10 
      .Width = 10 
     End With 
    Next i 

    Set ctrl = Me.Controls("Label1") 
    With ctrl 
     .Top = 0 
     .Left = 0 
    End With 

    Set ctrl = Me.Controls("Label2") 
    With ctrl 
     .Top = Me.Height - .Height 
     .Left = Me.Width - .Width 
    End With 
End Sub 

產生以下用戶窗體: USerform2 example 1

第一個標籤位於正好在用戶窗體但第二的頂部和左邊緣標籤無處可見,因爲它不在用戶窗體的可見部分。

我如何獲得第二個標籤正好坐在窗體的可見部分的底部和右側邊緣像下面的圖片? (我已經編輯第一圖像顯示我想要的) enter image description here

+0

這裏有一個帖子我騎着馬以調整用戶窗體和控件的方法:http://yoursumbuddy.com/dynamically-resize-form-controls-with-anchors/ –

回答

0

使用InsideHeightInsideWidth屬性:

With ctrl 
    .Top = Me.InsideHeight - .Height 
    .Left = Me.InsideWidth - .Width 
End With 
+0

謝謝,這是卓有成效的,不幸的是它是一個只讀屬性,我不能將它直接 – SilentRevolution

+0

爲什麼你需要什麼? – Rory

+0

我基於用戶輸入調整的形式,並且我總是希望周圍的控件相同的寬度邊緣。 – SilentRevolution

0

要更改InsideHeight/InsideWidth你必須計算出實際的高度/寬度。爲此,您需要知道每個用戶窗體邊框的寬度和標題欄的高度。例如,在某個用戶窗體的初始化做

Static FormBorderSize as single, FormTitleSize as single 
With Me 
    FormBorderSize = (Me.Width-Me.InsideWidth)/2 
    FormTitleSize = Me.Height-(Me.InsideHeight+Me.FormBorderSize) 
End With 

有了你可以計算用戶窗體整體高度/寬度,以獲得所需InsideHeight/InsideWidth這兩個值。

你可以聲明這兩個變量爲私有或公共屬性或這裏的靜態顯示。