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, BeginInvoke, EndInvokeи CreateGraphics , если дескриптор для элемента управления уже создан. Вызов CreateGraphics до создания дескриптора элемента управления в фоновом потоке может привести к незаконным вызовам между потоками. Для всех остальных вызовов методов следует использовать один из методов invoke для маршалинга вызова потока элемента управления.