MessageBoxDialog.NET 3.0.NET4.NET 2.0.NET 3.5Windows FormsC# 2.0C# 3.0C# 4.0IntermediateDevWindows.NETC#
Position a Windows Forms MessageBox in C#






4.96/5 (18 votes)
A tip about how to set the position of a Windows Forms MessageBox in C#
Introduction
There's no method in C# to position a MessageBox
. But in C++, you can position a message box by finding the message box and moving it. In this tip, I'll tell you how to position a MessageBox
in C#.
Using the Code
At the top of your code file, add these using
namespace statements:
using System.Runtime.InteropServices;
using System.Threading;
In your Form
class, add these DllImport
attributes:
[DllImport("user32.dll")]
static extern IntPtr FindWindow(IntPtr classname, string title); // extern method: FindWindow
[DllImport("user32.dll")]
static extern void MoveWindow(IntPtr hwnd, int X, int Y,
int nWidth, int nHeight, bool rePaint); // extern method: MoveWindow
[DllImport("user32.dll")]
static extern bool GetWindowRect
(IntPtr hwnd, out Rectangle rect); // extern method: GetWindowRect
The DllImportAttribute
class is available in each .NET version.
Then, you need to find and move the MessageBox
. To do that, use this code:
void FindAndMoveMsgBox(int x, int y, bool repaint, string title)
{
Thread thr = new Thread(() => // create a new thread
{
IntPtr msgBox = IntPtr.Zero;
// while there's no MessageBox, FindWindow returns IntPtr.Zero
while ((msgBox = FindWindow(IntPtr.Zero, title)) == IntPtr.Zero) ;
// after the while loop, msgBox is the handle of your MessageBox
Rectangle r = new Rectangle();
GetWindowRect(msgBox, out r); // Gets the rectangle of the message box
MoveWindow(msgBox /* handle of the message box */, x , y,
r.Width - r.X /* width of originally message box */,
r.Height - r.Y /* height of originally message box */,
repaint /* if true, the message box repaints */);
});
thr.Start(); // starts the thread
}
Call this method before you call MessageBox.Show
. When you call MessageBox.Show
, be sure the caption
parameter isn't empty, because the title
parameter must be equal to the caption
parameter.
For example:
FindAndMoveMsgBox(0, 0, true,"Title");
MessageBox.Show("Message","Title");