С# Winforms | Толщина границы формы

Есть ли какая-либо документация о том, насколько толстая граница правильной формы?

Цель:
я создал пользовательский элемент управления шириной 800 пикселей. Я хочу создать всплывающее окно (в целом нормальную форму) с новым экземпляром в полном разрешении (800 пикселей - все видно).

Моя проблема: настройка формы на Form.Size.Width = 800 не поможет. Похоже, что граница формы включена в свойство ширины формы. Мне нужно вычесть эту границу.

Должно быть что-то вроде: 2px + 800px + 2px

Если вы хотите увидеть какой-то код, скажите мне, но я думаю, что здесь он не нужен.

ИЗМЕНИТЬ:

введите здесь описание изображения

После открытия элемента управления:

введите здесь описание изображения

Код всплывающего окна:

private void buttonPopup_Click(object sender, EventArgs e)
{
    Form MyPopup = new Form();
    customControl MyUserControl = new customControl();

    MyUserControl.Dock = DockStyle.Fill;

    Rectangle rc = MyUserControl.RectangleToScreen(MyUserControl.ClientRectangle);

    //int thickness = SystemInformation.Border3DSize.Width;
    //MyPopup.MaximumSize = new Size(MyUserControl.Size.Width + (thickness*2), 1500);

    MyPopup.Controls.Add(MyUserControl);
    MyPopup.MaximumSize = new Size(rc.Width, rc.Height);
    MyPopup.Show();
}

Я имею в виду, что ваш код выглядит логичным для меня. Но все равно результат тот же. userControl отображается немного меньше. Я знаю, что использовал dock = fill, где моя кнопка не была профессионально размещена внутри макета. Но помимо этого должно быть решение, заключающееся в том, чтобы просто установить правильный размер.


person C4d    schedule 20.08.2015    source источник
comment
Взгляните на класс SystemInformation и свойство ClientRectangle   -  person Dmitry Bychenko    schedule 20.08.2015
comment
Кажется, вам нужно установить ClientSize (размер формы исключая границы, заголовок и т.д.). MyPopUp.ClientSize = new Size(...); вместо MaximumSize   -  person Dmitry Bychenko    schedule 20.08.2015


Ответы (1)


Кажется, вы ищете

int thickness = SystemInformation.Border3DSize;

другая (и, INHO, лучшая) возможность состоит в том, чтобы использовать ClientRectangle элемента управления. Например:

// Client rectangle in screen coordinates
Rectangle rc = MyControl.RectangleToScreen(MyControl.ClientRectangle);

// Let's align context menu (its width) to bottom of the control
MyContextMenuStrip.AutoSize = false;
// Depending on actual dropdown control you may want align either via
//   Width = rc.Width;
// Or 
//   ClientSize = new Size(rc.Width, someHeight);
MyContextMenuStrip.Width = rc.Width;

// Let's show context menu at the bottom of the control
MyContextMenuStrip.Show(new Point(rc.Left, rc.Bottom));
person Dmitry Bychenko    schedule 20.08.2015
comment
Для толщины: Отладка показывает 2 пикселя для width и height из Border3DSize. Я думаю, что эти значения немного слишком малы. Я проверю ClientRectangle. - person C4d; 20.08.2015
comment
@C4ud3x: да, ClientRectangle (особенно для определяемых пользователем элементов управления) является лучшим способом: ваш элемент управления может быть, скажем, плоским и т. д. - person Dmitry Bychenko; 20.08.2015
comment
Просто чтобы придерживаться той же идеи: меня не волнует положение моего всплывающего окна. Я просто забочусь о правильном размере, чтобы он соответствовал моему userControl. Добавлю 2 скриншота. Тогда проще увидеть. - person C4d; 20.08.2015
comment
В таком случае rc.Width и rc.Height к вашим услугам - person Dmitry Bychenko; 20.08.2015
comment
Добавлено 2 экрана (до - после). С вашими rc.Width и rc.Height я получаю тот же результат, что и в моем редактировании. Я тоже вставлю свой код. Возможно, я где-то еще ошибся. - person C4d; 20.08.2015
comment
Кажется, что вы должны установить ClientSize (размер элемента управления/формы исключая его границы, заголовок, скроллеры и т.д). MyPopUp.ClientSize = new Size(...); вместо MaximumSize - person Dmitry Bychenko; 20.08.2015
comment
Давайте продолжим обсуждение в чате. - person Dmitry Bychenko; 20.08.2015
comment
Не надо, вот! Добавьте свою ClientSize-информацию к своему ответу. Я отмечу это тогда :) Теперь он идеально подходит. - person C4d; 20.08.2015