Control.CreateGraphics Control.CreateGraphics Control.CreateGraphics Control.CreateGraphics Method

Определение

Создает объект Graphics для элемента управления.Creates the Graphics for the control.

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

Возвраты

Объект Graphics для элемента управления.The Graphics for the control.

Примеры

В следующем примере кода выполняется изменение размера указанного элемента управления, чтобы элемент управления соответствовал форматированному тексту.The following code example resizes the specified control so the control will accommodate its formatted text. Форматированный текст — это Text свойство с назначенным Font элементом управления, примененным к тексту.The formatted text is the Text property with the control's assigned Font applied to the text. Метод в этом примере также textPadding имеет параметр, который представляет заполнение, применяемое ко всем краям элемента управления. AutoSizeControlThe AutoSizeControl method in this example also has a textPadding parameter that represents the padding to apply to all edges of the control. Чтобы сделать заполнение одинаковым, выровняйте текст MiddleCenter по System.Drawing.ContentAlignment значению, если элемент управления поддерживает его.To make the padding appear equal, align the text with the MiddleCenter value of System.Drawing.ContentAlignment if your control supports it.

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

Комментарии

Объект, который вы получаете с CreateGraphics помощью метода, обычно не должен храниться после обработки текущего сообщения Windows, поскольку все, что нарисовано с помощью этого объекта, будет стерто со следующим сообщением WM_PAINT. GraphicsThe Graphics object that you retrieve through the CreateGraphics method should not normally be retained after the current Windows message has been processed, because anything painted with that object will be erased with the next WM_PAINT message. Поэтому нельзя кэшировать Graphics объект для повторного использования, за исключением использования невизуальных методов Graphics.MeasureString, таких как.Therefore you cannot cache the Graphics object for reuse, except to use non-visual methods like Graphics.MeasureString. Вместо этого необходимо вызвать CreateGraphics каждый раз, когда нужно Graphics использовать объект, а затем вызвать Dispose , когда вы завершите его использование.Instead, you must call CreateGraphics every time that you want to use the Graphics object, and then call Dispose when you are finished using it. Дополнительные сведения о сообщениях Windows см. WndProcв разделе.For more information about Windows messages, see WndProc.

По проекту CreateGraphics задает владение вызывающим потоком и завершается ошибкой, если он вызывается в других потоках.By design, CreateGraphics sets ownership to the calling thread, and fails if it is called on other threads.

Примечание

Помимо InvokeRequired свойства, существует четыре метода элемента управления, которые являются потокобезопасными: Invoke, BeginInvoke EndInvoke, и CreateGraphics , если уже был создан обработчик для элемента управления.In addition to the InvokeRequired property, there are four methods on a control that are thread safe: Invoke, BeginInvoke, EndInvoke, and CreateGraphics if the handle for the control has already been created. Вызов CreateGraphics перед созданием маркера элемента управления в фоновом потоке может привести к недопустимым перекрестным вызовам потоков.Calling CreateGraphics before the control's handle has been created on a background thread can cause illegal cross thread calls. Для всех остальных вызовов методов следует использовать один из методов Invoke для маршалирования вызова в поток элемента управления.For all other method calls, you should use one of the invoke methods to marshal the call to the control's thread.

Безопасность

UIPermission
для безопасного подокна для вызова этого метода.for safe subwindows to call this method. Связанное перечисление UIPermissionWindow: SafeSubWindows значение.Associated enumeration: SafeSubWindows value of UIPermissionWindow.

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

Дополнительно