c # - очистить поверхность при изменении размеров - PullRequest
0 голосов
/ 13 мая 2010

Я пытаюсь создать свой собственный пользовательский элемент управления для приложения форм Windows в C # .Net. В настоящее время я рисую некоторые прямоугольники и другие графические элементы, используя событие рисования. Теперь, когда я изменяю размер формы приложения, чтобы она соответствовала размеру рабочего стола, все элементы перекрашиваются (это именно то поведение, которое мне нужно), но старые отображаются на заднем плане.

Вот что я сейчас делаю:

Pen penDefaultBorder = new Pen(Color.Wheat, 1);
int margin = 5;
private void CustomControl_Paint(object sender, PaintEventArgs e) {
    CustomControl calendar = (CustomControl)sender;
    Graphics graphics = e.Graphics;
    graphics.Clear(Color.WhiteSmoke);

    graphics.DrawRectangle(penDefaultBorder, margin, margin, calendar.Width - margin * 2, calendar.Height - margin * 2);
    //...
}

Ни graphics.Clear, ни добавление graphics.FillRectangle (...) не скроют старый прямоугольник с поверхности.

Идеи? Спасибо всем.

Ответы [ 2 ]

2 голосов
/ 13 мая 2010

События рисования обычно не запрашивают обновления для всего холста, а только для области, указанной в PaintEventArgs. Я предполагаю, что происходит то, что только недавно открытые области холста передаются в PaintEventArgs.

Это одна из причин, по которой вы не должны выполнять рендеринг в событии Paint. Вы должны выполнить рендеринг в закадровое растровое изображение - буфер - и скопировать из этого буфера на холст элемента управления в событии Paint.

Поиск «двойной буферизации» здесь или в Google даст вам много примеров этой техники.

1 голос
/ 13 мая 2010

Вы пытались .Invalidate() вызвать перерисовку формы?

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