C# Position Windows: Use WorkingArea and LocationPosition Windows Forms with the WorkingArea and Location properties.
Position windows. A window can be positioned alongside another. It must be positioned automatically. It should appear in the correct place regardless of where the first window is. We manipulate the coordinates of Windows Forms.
Our example will position itself to the bottom. Let us look at some properties we need to use to solve this problem and enable relative positioning on windows.
This returns the height of the screen minus the taskbar in pixels.
Width of screen, minus the Vista sidebar or anything else.
This is the height of your window in pixels.
This is the width of the window in pixels.
Top left corner of the form in pixels relative to the screen.
X and Y:
Horizontal and vertical coordinates of Point.
Here we adjust the position of the window before it is shown. Look at the Screen.PrimaryScreen WorkingArea.Height and Width properties above. These are the most important trick to this project.
Here: We see the approach we will use to position windows like a palette relative to another window. This will position to the bottom.
Info: The example shows how to get the sizes of both windows. We must know the positions and sizes of both windows we want to position.
So: We must get the size of the working area, meaning the size of the user's desktop minus the taskbar. We use the WorkingArea class for this.
Finally: Before we place the form, we need to make sense that our new position makes sense. Then we place the new Form.
C# program that positions a sub-window
/// A Windows Form.
public partial class MainWindow : Form
/// The Windows Form we want to position.
ReporterWindow _reporterWin = new ReporterWindow();
public MainWindow ()
private void reportMoveToolStripMenuItem_Click(object sender, EventArgs e)
// This is an event handler triggered by a menu item (or button).
PositionReporterEdge(); // Position the window.
/// Position the "Reporter" form next to the current form.
private void PositionReporterEdge()
int screenHeight = Screen.PrimaryScreen.WorkingArea.Height;
int screenWidth = Screen.PrimaryScreen.WorkingArea.Width;
Point parentPoint = this.Location;
int parentHeight = this.Height;
int parentWidth = this.Width;
int childHeight = _reporterWin.Height;
int childWidth = _reporterWin.Width;
if ((parentPoint.Y + parentHeight + childHeight) > screenHeight)
// If we would move off the screen, position near the top.
resultY = parentPoint.Y + 50; // move down 50
resultX = parentPoint.X;
// Position on the edge.
resultY = parentPoint.Y + parentHeight;
resultX = parentPoint.X;
// set our child form to the new position
_reporterWin.Location = new Point(resultX, resultY);
Call the PositionReporterEdge method before you show the ReporterWin Windows Form. The above function supports positioning a new window to the bottom, which is a fairly common position for palettes and similar windows.
Tip: You can add left, right and top if you need them. The method can be modified with additional features.
FormBorderStyle. I have found that the FormBorderStyle of "FixedToolWindow" looks best for palettes. This will mean that your form will look like a palette in Photoshop. I have found that a "FixedSingle" style looks good for a "Find and Replace" window.
I have used this method or one similar to it for creating windows like palettes that show next to the side of a window. The example code here is for a reporting window for a move on a game board (think chess or a board game).
Also: I have used it for a "Find in this page" window, similar to Microsoft Word's.
Summary. We positioned a window on the edge of another window, using Windows Forms. You can achieve an awesome user experience with a palette window or a find window, or other types of windows.
© 2007-2020 Sam Allen. Every person is special and unique. Send bug reports to firstname.lastname@example.org.