0

ボタン「btn_email」のあるフォームがあります。

このボタンを押すと、新しい (非モーダル) フォームがそのボタンの下に開かれ、右揃えになります。

Dim eform As New frm_iemail
With eform
    .Location = ?
    .Show(Me)
End With

新しいフォームのこの (記述された) 位置を計算する最良の方法はどれですか?
この計算はどのように見えるべきですか?

モーリスの解決策の後に編集:

Dim eform As New frm_iemail
With eform
    .StartPosition = FormStartPosition.Manual
    .Location = New Point((Me.Left + btn_email.Left + Button1.Width), (Me.Top + btn_email.Top))
    .Show(Me)
End With

アプローチ2:

Dim BorderWidth As Integer = (Me.Width - Me.ClientSize.Width) / 2
Dim TitlebarHeight As Integer = Me.Height - Me.ClientSize.Height - 2 * BorderWidth
.DesktopLocation = New Point((Me.Left + Button1.Left + Button1.Width + BorderWidth), (Me.Top + TitlebarHeight + BorderWidth + Button1.Top))

私の解決策:

Dim BorderWidth As Integer = SystemInformation.FrameBorderSize.Width
Dim TitlebarHeight As Integer = SystemInformation.CaptionHeight + BorderWidth
Dim distance As Integer = 3

Dim eform As New frm_iemail
With eform
    .StartPosition = FormStartPosition.Manual
    .FormBorderStyle = Windows.Forms.FormBorderStyle.None
    .Location = New Point(Me.Location.X + btn_email.Location.X + btn_email.Width + BorderWidth - .Width, TitlebarHeight + Me.Location.Y + btn_email.Location.Y + btn_email.Height + distance)
    .Show(Me)
End With

最終的解決:

.Location = New Point(Me.Location.X + btn_email.Right + BorderWidth - .Width, TitlebarHeight + Me.Location.Y + btn_email.Bottom + distance)
4

3 に答える 3

2

次のコードは、フォームをボタンの下に配置し、両方のコントロールを右揃えにします。右揃えで私が理解しているのは、 の右側eformと同じ Y 値を持つ の右側btn_email:

With eform
    .Show(Me)
    .Location = New Point(Me.Left + btn_email.Right - .Width, Me.Top + btn_email.Bottom + btn_email.Height)
    .BringToFront()
End With

注: フォームの種類 (ボーダーなど) によっては、わずかな隙間が生じる場合があります。しかし、これは別の回答(および質問の最後の更新)によってすでに処理されています。

于 2013-09-05T08:40:57.413 に答える
1

これは C# ですが、vb.net ソリューションを実装するには十分であることに注意してください。

    private void button1_Click(object sender, EventArgs e)
    {
        // Create and show the form
        Form1 form = new Form1();            
        form.Show();

        // Caculate thicknesses of border and titlebar
        int borderWidth = (this.Width - this.ClientSize.Width) / 2;
        int titlebarHeight = this.Height - this.ClientSize.Height - 2 * borderWidth;

        // Calculate the form position
        var x = this.Left + button1.Left + button1.Width + borderWidth - form.Width;
        var y = this.Top + titlebarHeight + borderWidth + button1.Top + button1.Height;

        // Position the form
        form.DesktopLocation = new Point(x, y);
    }
于 2013-09-05T08:21:14.257 に答える
0

これを試して ..

Dim eform As New frm_iemail
With eform
    .Location = new point(Me.Location.X + btn_email.Location.X + btn_email.Width, Me.Location.Y + btn_email.Location.Y + btn_email.Height)
    .Show(Me)
End With
于 2013-09-05T08:34:11.177 に答える