У меня есть форма с кнопкой "btn_email".Расчет новой формы loaction
Нажав на эту кнопку, я хочу, чтобы новая (не модальная) форма была открыта ниже этой кнопки и выровнена вправо.
Dim eform As New frm_iemail
With eform
.Location = ?
.Show(Me)
End With
Каков наилучший способ рассчитать это (описанное) положение новой формы?
Как должен выглядеть этот расчет?
EDIT после решения Мориса:
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
Approach2:
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)
Можете ли вы добавить изображение простой доски, обозначающее кнопку и позицию формы, в которой она должна быть размещена? – Aphelion
Это в основном то, что вам нужно сделать. Единственный бит, который может быть улучшен, заключается в замене btn_email.Location.X + btn_email.Width на btn_email.right (как показано в моем ответе). – varocarbas
@Maurice, извините, я не могу делать изображения сейчас, но ситуация достаточно описана. –