C# - Рисование центрированного прямоугольника с графикой в ​​Windows Форма не дает ожидаемого результата - PullRequest
0 голосов
/ 17 апреля 2020

Я сделал небольшой проект, чтобы сделать несколько тестов для рисования. Я нахожусь под 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.

Но почему? Я до сих пор не понимаю. Это противоречит мне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...