How to dock a windows form in C#?

27,676

Solution 1

So after some tweaks I finally was able to get this code working.

this.DesktopLocation = new Point((Screen.PrimaryScreen.Bounds.Width / 2 - 420), 0);

I placed that line below the InitializeComponent() and it docks my form to the center of the screen with whatever resolution values.

Solution 2

I would consider using the Control.Dock property along with one of the DockStyle enumeration values.

You might need to play with the Layout too, so that you may layout your form's controls differently depending on the DockStyle selected.

You will need, in my point of view, to consider the Control.Location property so that you get to know which DockStyle value to dock your form with.

EDIT #1

Your Windows Form has a Dock property as it inherits from Control.

Let's consider the following :

  1. Each time your form comes closer to your right-side of the screen, for example, or of the MDI container, you want to dock right, right ? (Little word play here... =P) So, you have to subscribe to the Control.LocationChanged event.

    private void myForm_LocationChanged(object sender, EventArgs e) {
        if (this.Location.X > 900) then
            this.Dock = DockStyle.Right;
        else if (this.Location.X < 150) then
            this.Dock = DockStyle.Left;
        else if (this.Location.Y > 600) then
            this.Dock = DockStyle.Bottom;
        else if (this.Location.Y < 150) then
            this.Dock = DockStyle.Top;
        else
            this.Dock = DockStyle.None;
    }
    

Indeed, instead of constant values, you should use the current desktop resolution and calculate a ratio from it where you want your docking to occur.

***Disclaimer:****This code is provided as-is and has not been tested. This algorithm is hopefully enough to guide you through the docking process as you need it. Further assistance may be brought upon request.* =)

It seems the Form.DesktopLocation property is the righter tool for the job as for your main window, meaning your MDI container, for instance. As for the other windows, I would go along with something that looks like the code sample provided.

Does this help?

EDIT #2

If you want to prevent Form's overlapping, perhaps the Control.BringToFront() method could do it before or after your call to the Control.Show() method, depending on what works best for you.

Share:
27,676

Related videos on Youtube

Smiley
Author by

Smiley

Updated on July 30, 2020

Comments

  • Smiley
    Smiley almost 4 years

    I just would like to know if it is possible to dock a windows form on top of the user screen? I have been trying to do this by manually setting the position of my form to the coordinates I want. But using this method, however, allows the user to change the position of the form just by dragging it. I want to make the form docked to the upper portion of the screen since this window form will server as a menu for the project I am making.

    Thanks a lot. :)

  • Smiley
    Smiley almost 14 years
    hello, thanks for the response. I'm a bit new to using the extensive functionalities of Visual Studio 2008 and i quite don't know how I can use the Control.Dock property. Can you please give me some examples on how I can use those properties? thanks :)
  • Jouke van der Maas
    Jouke van der Maas almost 14 years
    That's for docking controls within a form, not for docking the entire form.
  • Will Marcouiller
    Will Marcouiller almost 14 years
    @Jouke Van Der Maas: I guess you didn't read all of my answer. I mention the DesktopLocation property, that is, for docking the whole window on the desktop. Furthermore, I suggest that this might be a better tool for the job after the OP precised his idea. Please revise your comment accordingly.
  • Jouke van der Maas
    Jouke van der Maas almost 14 years
    @Will Marcouiller You must've edited, i will now remove my downvote. Nevermind I can't unless you edit again.
  • Will Marcouiller
    Will Marcouiller almost 14 years
    @Jouke Van Der Maas: I edited my answer for you to remove your downvote, if you wish so. However, please see your comment age in comparison to my edit age. I had edited 4 hours before you let your comment. Never mind anyway, the most important is that we now both agree that my question might help.
  • Smiley
    Smiley almost 14 years
    this helped me with a new idea of how to do my project. thanks a lot :)