Метод CreateGraphics () и аргументы рисования событий - PullRequest
5 голосов
/ 18 марта 2011

Я где-то читал, что CreateGraphics() сделает для нас следующие шаги:

  1. BeginPaint
  2. Рисунок
  3. EndPaint

У меня есть такой код:

private void Form1_Load(object sender, EventArgs e)
{
    grFrom = this.CreateGraphics();
    grFrom.FillRectangle(Brushes.Red, this.ClientRectangle);
}

Красного прямоугольника нет ... но, когда я копирую строку ниже в Form1_paint, все работает правильно.

grFrom.FillRectangle(Brushes.Red, this.ClientRectangle);

Итак, вопрос здесь: Что такое e.Graphics в Form1_paint?

CreateGraphics или e.Graphics?

Ответы [ 3 ]

6 голосов
/ 18 марта 2011

Две вещи:

  1. CreateGraphics предоставляет вам графический объект, который вы должны всегда Dispose() до выхода. Вы должны поместить свое утверждение в блоке using.
  2. Графика, которую вы рисуете, действительна только до перекрашивания формы. В вашем случае, вызывая это в Form_Load, это происходит до первого рендеринга и «выбрасывается». Вы должны всегда помещать это в OnPaint (), чтобы оно было «постоянным» на экране, так как это приведет к его перерисовке при перерисовке элемента управления.
1 голос
/ 18 марта 2011

Ваш вызов загрузки формы рисует в форме, но затем первое обычное событие рисования формы записывается поверх него, так что вы никогда его не увидите.(Как это происходит до того, как вы представили форму вообще)

Итак, вопрос здесь: Что такое

e.Graphics в form1_paint?

CreateGraphics или e.Graphics?

Я вполне уверен, что они эквивалентны, что вам нужно, это лучшее понимание жизненного цикла событий форм Windows.

Этот ответ имеет соответствующие ссылки: Жизненный цикл события WinForms

0 голосов
/ 18 марта 2011

Вы создаете новый графический объект, который, скорее всего, поддерживается буфером памяти.Графические объекты, которые вы получаете из e.Graphics, поддерживаются буфером, который представляет область экрана текущего окна (окно, как в дескрипторе окна, а не окно с заголовком и т. Д.).

Вы всегда можете битБлит данные из созданного графического объекта на один из e.Graphics.

Я уверен, что кто-то разработает гораздо больше, чем я.

...