Control.CreateGraphics Metoda

Definicja

Tworzy Graphics dla kontrolki.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

Zwraca

Graphics

GraphicsDla kontrolki.The Graphics for the control.

Przykłady

Poniższy przykład kodu zmienia rozmiar określonej kontrolki, aby formant pomieścił swój sformatowany tekst.The following code example resizes the specified control so the control will accommodate its formatted text. Sformatowany tekst to Text Właściwość z przypisanym do tekstu kontrolką Font .The formatted text is the Text property with the control's assigned Font applied to the text. AutoSizeControlMetoda w tym przykładzie ma również textPadding parametr, który reprezentuje uzupełnienie, które ma zostać zastosowane do wszystkich krawędzi formantu.The AutoSizeControl method in this example also has a textPadding parameter that represents the padding to apply to all edges of the control. Aby dopełnienie było równe, Wyrównaj tekst do wartości, MiddleCenter System.Drawing.ContentAlignment Jeśli kontrolka ją obsługuje.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

Uwagi

GraphicsObiekt, który można pobrać za pomocą CreateGraphics metody, nie powinien zwykle być zachowywany po przetworzeniu bieżącego komunikatu systemu Windows, ponieważ wszystkie elementy rysowane przy użyciu tego obiektu zostaną wymazane przy użyciu następnego komunikatu WM_PAINT.The 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. W związku z tym nie można buforować Graphics obiektu do ponownego użycia, z wyjątkiem używania metod niewizualnych, takich jak Graphics.MeasureString .Therefore you cannot cache the Graphics object for reuse, except to use non-visual methods like Graphics.MeasureString. Zamiast tego należy wywoływać CreateGraphics za każdym razem, gdy chcesz użyć Graphics obiektu, a następnie wywołać Dispose po zakończeniu korzystania z niego.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. Aby uzyskać więcej informacji na temat komunikatów systemu Windows, zobacz WndProc .For more information about Windows messages, see WndProc.

Zgodnie z projektem program CreateGraphics Ustawia własność na wątek wywołujący i kończy się niepowodzeniem, jeśli jest wywoływany w innych wątkach.By design, CreateGraphics sets ownership to the calling thread, and fails if it is called on other threads.

Uwaga

Oprócz InvokeRequired Właściwości istnieją cztery metody kontrolki, które są bezpieczne dla wątków: Invoke ,, BeginInvoke EndInvoke , i CreateGraphics Jeśli uchwyt dla kontrolki został już utworzony.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. Wywołanie CreateGraphics przed utworzeniem uchwytu kontrolki w wątku w tle może spowodować niedozwolone wywołania międzywątkowe.Calling CreateGraphics before the control's handle has been created on a background thread can cause illegal cross thread calls. Dla wszystkich innych wywołań metody należy użyć jednej z metod Invoke do skierowania wywołania do wątku formantu.For all other method calls, you should use one of the invoke methods to marshal the call to the control's thread.

Dotyczy

Zobacz też