Я сделал небольшой проект, чтобы сделать несколько тестов для рисования. Я нахожусь под Visual Studio 2019 (версия для сообщества), и я использую. Net Framework 4.7.2.
Вот контекст: я сделал Windows Проект формы. Моя форма полноэкранная и без полей, и в этой форме у меня есть CenteredRectanglePanel
(который наследуется от Panel). Эта панель занимает все пространство, доступное в моей форме. Таким образом, теоретически, панель имеет тот же размер, что и мой экран (1920x1080)
Теперь мне нужно нарисовать по центру прямоугольник на моем экране.
Вот код, который я думал, что смогу Нарисуйте мой прямоугольник по центру:
public class CenteredRectanglePanel : Panel {
public CenteredRectanglePanel(Control parent) { // The parent is my form
var boundsX = parent.Bounds.X + (int) (parent.Bounds.Width * 0.1);
var boundsY = parent.Bounds.Y + (int) (parent.Bounds.Height * 0.1);
var boundsWidth = parent.Bounds.Width - 2 * boundsX;
var boundsHeight = parent.Bounds.Height - 2 * boundsY;
Bounds = new Rectangle(boundsX, boundsY, boundsWidth, boundsHeight);
var brush = new SolidBrush(Color.Aqua);
CreateGraphics().FillRectangle(brush, Bounds);
}
}
И вот результат на моем экране:
Здесь прямоугольник не по центру
Это не что я хочу. Как видите, прямоугольник не центрирован. И левый пробел кажется в два раза больше правого.
Но, если я изменю код для этого:
public class CenteredRectanglePanel : Panel {
public CenteredRectanglePanel(Control parent) { // The parent is my form
var boundsX = parent.Bounds.X + (int) (parent.Bounds.Width * 0.1);
var boundsY = parent.Bounds.Y + (int) (parent.Bounds.Height * 0.1);
var boundsWidth = parent.Bounds.Width - 3 * boundsX;
var boundsHeight = parent.Bounds.Height - 3 * boundsY;
Bounds = new Rectangle(boundsX, boundsY, boundsWidth, boundsHeight);
var brush = new SolidBrush(Color.Aqua);
CreateGraphics().FillRectangle(brush, Bounds);
}
}
Вот результат:
Здесь прямоугольник отцентрирован правильно
Теперь у меня есть ожидаемый результат. Все, что мне нужно было сделать, это изменить 2 * boundsX
и 2 * boundsY
на 3 * boundsX
и 3 * boundsY
.
Но почему? Я до сих пор не понимаю. Это противоречит мне.