тогда видимо либо отслеживать эти размеры с самого рождения формы, что довольно суетно:
| Код | public partial class Form1 : Form { public Form1() { InitializeComponent(); normalBounds = Bounds; // -1 for Left/Top means not assigned or position is system defined }
private Rectangle normalBounds;
private void Form1_SizeChanged(object sender, EventArgs e) { if (WindowState == FormWindowState.Normal) { normalBounds = Bounds; } }
private void Form1_LocationChanged(object sender, EventArgs e) { if (WindowState == FormWindowState.Normal) { normalBounds = Bounds; } } }
|
либо Win32 API + GetWindowPlacement + rcNormalPosition, что невыносимо.. т.е. непереносимо.. т.е. некрасиво 
| Код | public partial class Form1 : Form { public Form1() { InitializeComponent(); }
public Rectangle NormalBounds { get { NativeMethods.WINDOWPLACEMENT placement = new NativeMethods.WINDOWPLACEMENT(); placement.length = Marshal.SizeOf(typeof(NativeMethods.WINDOWPLACEMENT)); NativeMethods.GetWindowPlacement(this.Handle, ref placement); return Rectangle.FromLTRB( placement.rcNormalPosition.left, placement.rcNormalPosition.top, placement.rcNormalPosition.right, placement.rcNormalPosition.bottom ); } } }
static class NativeMethods { [DllImport("user32.dll")] public static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);
public struct POINT { public int x; public int y; }
public struct RECT { public int left; public int top; public int right; public int bottom; }
public struct WINDOWPLACEMENT { public int length; public int flags; public int showCmd; public POINT ptMinPosition; public POINT ptMaxPosition; public RECT rcNormalPosition; } }
|
|