views:

28

answers:

2

I would like to display 2 forms side by side. Frm1 will call Frm2. The problem is, if Frm1 is too near the edge of the computer screen, when Fr2 is shown, part of it will be outside the screen.

How do I make it so that if Frm1 is near the right-side of the screen then Frm2 will show on the left-side of Frm1 and vise-versa? Thanks

+1  A: 

Assuming WinForms, you can compare form.Bounds to Screen.FromControl(form).WorkingArea.

For example:

var screen = Screen.FromControl(form);
if (form.Right < screen.Left + Screen.Width / 2)
    otherForm.Left = screen.Left + Screen.Width / 2;
else
    otherForm.Left = 0;
SLaks
I'm using WinForms. I try the above code but don't quite understand. like how to use FromControl? when i use Screen.FromControl(Form) i got an error.please give further explanation, thanks.
jameslcs
A: 

finally got it working, here is the solution:

 Public Class Form1
    Public IsFormLeft As Boolean
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim frm1ScreenArea = Screen.FromControl(Me).WorkingArea

        If Me.Right < frm1ScreenArea.Left + frm1ScreenArea.Width / 2 Then
            IsFormLeft = True 'Form1 in Left area
        Else
            IsFormLeft = False 'Form1 in Right area
        End If
        Form2.ShowDialog()
    End Sub
End Class


Public Class Form2
       Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        If Form1.IsFormLeft Then
            Me.Left = Form1.Left + Form1.Width
            Me.Top = Form1.Top
        Else
            Me.Left = Form1.Right - Form1.Width * 2
            Me.Top = Form1.Top
        End If
    End Sub
End Class
jameslcs
SLaks, thanks f editing the format, don't know why can't make it right. some bugs?
jameslcs