C# Полностью скрыть границу формы только при максимизации
У меня есть форма, которая является дочерней формой MDI. Когда эта форма не развернута, она помещается внутри формы MDI, под несколькими панелями меню и элементами управления. Он имеет рамку, значок и панель управления. Когда форма развернута, граница отображается непосредственно под основной границей формы MDI. Когда оно развернуто, блок управления отключен, и нам не нужна граница по какой-либо причине - она выглядит просто неаккуратно. Размер формы изменяется программным способом, поэтому при максимизации никогда не возникает необходимости в границах / элементах управления.
Есть ли способ установить FormBorderStyle = None, ТОЛЬКО, когда форма развернута, и FormBorderStyle = sizeable, когда он имеет любой размер, кроме Max?
Смотрите скриншоты ниже. Красная линия находится на границе, которую я хочу скрыть - область, отмеченная элементами управления toolstrip, находится выше формы, а не на ней. Пустое пространство, помеченное графическим блоком, является фактической формой, имеющей границу Если оно не развернуто, граница будет отображаться непосредственно над областью графического блока и под областью полосок инструментов и может быть изменена пользователем. При максимизации пользователь не может изменить его размер, поэтому я хочу скрыть эту границу, так как она выглядит неряшливо под основной границей формы
Когда не развернуто: [1]:
2 ответа
Я написал этот код в соответствии с другими постами, которые я нашел в stackru и googling.
Я проверил это, и это работает.
[DllImport("user32.dll")]
private static extern int GetWindowLong(IntPtr hWnd, int nIndex);
[DllImport("user32.dll")]
private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
[DllImport("user32.dll", ExactSpelling = true)]
private static extern int SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
const int GWL_EXSTYLE = -20;
const int WS_EX_CLIENTEDGE = 0x200;
const uint SWP_NOSIZE = 0x0001;
const uint SWP_NOMOVE = 0x0002;
const uint SWP_NOZORDER = 0x0004;
const uint SWP_NOACTIVATE = 0x0010;
const uint SWP_FRAMECHANGED = 0x0020;
const uint SWP_NOOWNERZORDER = 0x0200;
private void MdiEdgeBorderOnOff(bool off)
{
foreach(Control ctl in this.Controls)
{
if (ctl.GetType() != typeof(MdiClient)) continue;
int wnd = GetWindowLong(ctl.Handle, GWL_EXSTYLE);
if (off)
wnd &= ~WS_EX_CLIENTEDGE;
else
wnd |= WS_EX_CLIENTEDGE;
SetWindowLong(ctl.Handle, GWL_EXSTYLE, wnd);
SetWindowPos(ctl.Handle, IntPtr.Zero, 0, 0, 0, 0,
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER |
SWP_NOOWNERZORDER | SWP_FRAMECHANGED);
}
}
Это дочерняя форма, следовательно, она не может максимизировать родительскую форму. Можете ли вы поделиться более подробной информацией, чтобы помочь вам? Может поделитесь скриншотом?