1

このようなフォームにコントロールを追加しています

Dim sharpUserX As New SharpUser()
Dim y As Integer = 0
For Each con As Control In PnlSharpUsers.Controls
    If TypeOf(con) is SharpUser then ' as i have the pnaddbtn, which i move to the bottom below
        If y < con.Bottom Then y = con.Bottom
    End If
Next
sharpUserX.Location = New Point(2, y)

'sharpUserX.Location = pnlAddBtn.location 'this does that exact same

sharpUserX.Size = sharpUserSize
PnlSharpUsers.Controls.Add(sharpUserX)
'put add button back on
pnlAddBtn.Location = New Point(pnlAddBtn.Left, sharpUserX.Bottom) 'strangely this is always correct

これはボタンを押すと呼び出され、ShrpUser コントロールがパネルに追加され、addbtn パネルが下部に移動します。

追加ボタン パネルは正しく移動しますが、追加された新しいコントロールは追加されますが、その場所は前のコントロールとのギャップの差の 2 倍のようです。

追加するたびに出力した場合の場所は次のとおりです

1 added
loc={X=2,Y=0} size={Width=849, Height=117}
2nd added
loc={X=2,Y=0} size={Width=849, Height=117}
loc={X=2,Y=135} size={Width=849, Height=117}
3rd added
loc={X=2,Y=0} size={Width=849, Height=117}
loc={X=2,Y=135} size={Width=849, Height=117}
loc={X=2,Y=291} size={Width=849, Height=117}

2 の y は 117 で、3 の y は 234 である必要があります。フォームはフォントによってスケーリングされます。これが原因だと思っていますが、何をすべきかわかりませんし、pnladdBtn が機能する理由も理解できません。

4

1 に答える 1

0

これはハックのようなものですが、機能します。

sharpUserX.Size = sharpUserSize
PnlSharpUsers.Controls.Add(sharpUserX)
sharpUserX.Location = pnlAddBtn.Location

コントロールを追加する前にサイズを設定すると、フォントのスケーリングがサイズに適用されたように見えた後に場所を設定しますが、場所は設定されません。これは私にとっては完全に機能します。

于 2013-08-20T10:21:56.617 に答える