    public Size ClientSize {
        get {
            return new Size(clientWidth, clientHeight);
        }

        set {
            SetClientSizeCore(value.Width, value.Height);
        }
    }

    protected virtual void SetClientSizeCore(int x, int y) {
        Size = SizeFromClientSize(x, y);
        clientWidth = x;
        clientHeight = y;
        OnClientSizeChanged(EventArgs.Empty);
    }

    internal Size SizeFromClientSize(int width, int height) {
        NativeMethods.RECT rect = new NativeMethods.RECT(0, 0, width, height);
        CreateParams cp = CreateParams;
        SafeNativeMethods.AdjustWindowRectEx(ref rect, cp.Style, HasMenu, cp.ExStyle);
        return rect.Size;
    }
