Поделиться через


Control.CreateGraphics Метод

Определение

Graphics Создает элемент управления.

public:
 System::Drawing::Graphics ^ CreateGraphics();
public System.Drawing.Graphics CreateGraphics();
member this.CreateGraphics : unit -> System.Drawing.Graphics
Public Function CreateGraphics () As Graphics

Возвращаемое значение

Элемент Graphics управления.

Примеры

В следующем примере кода изменяется размер указанного элемента управления, поэтому элемент управления будет размещать форматированный текст. Форматированный текст — это Text свойство с назначенным Font элементом управления, примененным к тексту. Метод AutoSizeControl в этом примере также имеет textPadding параметр, представляющий заполнение для применения ко всем краям элемента управления. Чтобы сделать заполнение равным, выровняйте текст со MiddleCenter значением System.Drawing.ContentAlignment , если элемент управления поддерживает его.

private:
   void AutoSizeControl( Control^ control, int textPadding )
   {
      
      // Create a Graphics object for the Control.
      Graphics^ g = control->CreateGraphics();
      
      // Get the Size needed to accommodate the formatted Text.
      System::Drawing::Size preferredSize = g->MeasureString( control->Text, control->Font ).ToSize();
      
      // Pad the text and resize the control.
      control->ClientSize = System::Drawing::Size( preferredSize.Width + (textPadding * 2), preferredSize.Height + (textPadding * 2) );
      
      // Clean up the Graphics object.
      delete g;
   }
private void AutoSizeControl(Control control, int textPadding)
{
   // Create a Graphics object for the Control.
   Graphics g = control.CreateGraphics();

   // Get the Size needed to accommodate the formatted Text.
   Size preferredSize = g.MeasureString(
      control.Text, control.Font).ToSize();

   // Pad the text and resize the control.
   control.ClientSize = new Size(
      preferredSize.Width + (textPadding * 2), 
      preferredSize.Height+(textPadding * 2) );

   // Clean up the Graphics object.
   g.Dispose();
}
Private Sub AutoSizeControl(control As Control, textPadding As Integer)
   ' Create a Graphics object for the Control.
   Dim g As Graphics = control.CreateGraphics()
   
   ' Get the Size needed to accommodate the formatted Text.
   Dim preferredSize As Size = g.MeasureString( _
     control.Text, control.Font).ToSize()
   
   ' Pad the text and resize the control.
   control.ClientSize = New Size( _
     preferredSize.Width + textPadding * 2, _
     preferredSize.Height + textPadding * 2)
   
   ' Clean up the Graphics object.
   g.Dispose()
End Sub

Комментарии

Объект Graphics , полученный с помощью CreateGraphics метода, не должен обычно храниться после обработки текущего сообщения Windows, так как все, что окрашено с этим объектом, будет удалено с помощью следующего сообщения WM_PAINT. Поэтому нельзя кэшировать объект для повторного Graphics использования, за исключением использования не визуальных методов, таких как Graphics.MeasureString. Вместо этого необходимо CreateGraphics вызывать каждый раз, когда вы хотите использовать Graphics объект, а затем вызывать Dispose после завершения работы с ним. Дополнительные сведения о сообщениях Windows см. в статье WndProc.

По проектированию CreateGraphics задает владение вызывающему потоку и завершается ошибкой, если он вызывается в других потоках.

Замечание

В дополнение к InvokeRequired свойству существует четыре метода в элементе управления, который является потокобезопасной: Invoke, BeginInvokeEndInvokeи CreateGraphics если дескриптор для элемента управления уже создан. Вызов CreateGraphics до создания дескриптора элемента управления в фоновом потоке может вызвать незаконные вызовы между потоками. Для всех других вызовов методов следует использовать один из методов вызова для маршалирования вызова потока элемента управления.

Применяется к

См. также раздел