views:

332

answers:

5

I have been up and down this site and found a lot of info on the Screen class and how to count the number of monitors and such but how do I determine which montitor a form is currently in?

A: 

Each Screen object has a Bounds property you can use to find the coordinates the screen occupies, just check where the form is.

Lasse V. Karlsen
A: 

I did notice that but I was hoping for something more elequent (from .net not from you.) So based on your advice I did this:

    foreach (Screen screen in System.Windows.Forms.Screen.AllScreens)
    {
        if (screen.Bounds.Contains(this.Location))
        {
            this.textBox1.Text = screen.DeviceName;
        }
    }
jvberg
+2  A: 

This should do the trick for you:

private Screen FindCurrentMonitor(Form form) 
{ 
    return Windows.Forms.Screen.FromRectangle(new Rectangle( _
        form.Location, form.Size)); 
}

It will return the screen that has the majority of the form in it. Alternativley, you can use

return Windows.Forms.Screen.FromPoint(Form.Location);

to return the screen that has the top left corner of the form in it.

Matt Hanson
+3  A: 

A simpler method than using the bounds is to use the Screen.FromControl() method. This is the same functionality that Windows uses.

Screen.FromControl(this)

will return the screen object for the screen that contains most of the form that you call it from.

Dan R
A: 

Wierd, I only saw the original answer when I posted last not the 2 in between. Thanks all for the responses.

Dan, your answer is the sort of thing I was looking for. Worked like a champ.

jvberg