В настоящее время я пытаюсь выполнить то, что, по моему мнению, было бы простой задачей:
Нарисуйте изображение на всей области элемента управленияPanel
в Windows Forms. (Пожалуйста, проигнорируйте на данный момент, что я мог бы использовать свойствоBackgroundImage
)
Изображение для рисования выглядит следующим образом:
Т.е. желтая рамка с синей рамкой 1 пиксель вокруг.
Для рисования я использую событие Paint
элемента управления Panel
:
private void panel1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawImage(Resources.MyImage, panel1.ClientRectangle);
}
Это выглядит нормально при первоначальном отображении формы:
При изменении размера формы (и закрепленной панели тоже) она либо срезает края, когда становится меньше...
... или он рисует артефакты, когда его делают больше:
Я почти уверен, что происходит что-то довольно простое и прямолинейное, но я действительно не могу понять причину.
Поскольку я игнорирую ClipRectangle
и всегда рисую все, я думал, что изображение будет масштабироваться все время.
Мои вопросы:
Invalidate
при каждом изменении размера)Обновление, РЕШЕНИЕ:
Благодаря ответу Райана, я смог найти приемлемое решение. По сути, я вывел класс из Panel
, переопределил OnPaintBackground
и вызвал небазовый метод. Наконец, я добавил следующий код в конструктор моей производной панели:
base.DoubleBuffered = true;
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.ResizeRedraw, true);
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
UpdateStyles();