Sdílet prostřednictvím


ovládací prvky User-Drawn

Rozhraní .NET Framework poskytuje možnost snadného vývoje vlastních ovládacích prvků. Můžete vytvořit uživatelský ovládací prvek, což je sada standardních ovládacích prvků svázaných kódem, nebo můžete navrhnout vlastní ovládací prvek od základů. Dědičnost můžete dokonce použít k vytvoření ovládacího prvku, který dědí z existujícího ovládacího prvku, a přidat ho do jeho vlastní funkce. Bez ohledu na to, co použijete, poskytuje rozhraní .NET Framework funkci pro kreslení vlastního grafického rozhraní pro jakýkoliv ovládací prvek, který vytvoříte.

Vykreslování ovládacího prvku se provádí spuštěním kódu v metodě OnPaint ovládacího prvku. Jediným argumentem OnPaint metody je PaintEventArgs objekt, který poskytuje všechny informace a funkce potřebné k vykreslení ovládacího prvku. PaintEventArgs poskytuje jako vlastnosti dva hlavní objekty, které se použijí při vykreslování ovládacího prvku:

  • ClipRectangle objekt – obdélník, který představuje část ovládacího prvku, který bude nakreslen. To může být celý ovládací prvek nebo část ovládacího prvku v závislosti na způsobu vykreslení ovládacího prvku.

  • Graphics objekt – zapouzdřuje několik graficko-orientovaných objektů a metod, které poskytují funkcionalitu potřebnou k vykreslení ovládacího prvku.

Další informace o objektu Graphics a jeho použití naleznete v tématu Jak na to: Vytváření grafických objektů pro kreslení.

Událost OnPaint se aktivuje při každém vykreslení nebo aktualizaci ovládacího prvku na obrazovce a objekt ClipRectangle představuje obdélník, ve kterém proběhne malování. Pokud je potřeba aktualizovat celý ovládací prvek, bude ClipRectangle představovat velikost celého ovládacího prvku. Pokud je však potřeba aktualizovat pouze část ovládacího prvku, bude objekt ClipRectangle představovat pouze oblast, kterou je potřeba překreslit. Příkladem takového případu by bylo, když byl ovládací prvek částečně zakryt jiným ovládacím prvku nebo formulářem v uživatelském rozhraní.

Při dědění z třídy Control je nutné metodu OnPaint přepsat a poskytnout grafický vykreslovací kód v rámci. Pokud chcete uživatelskému ovládacímu prvku nebo zděděným ovládacím prvkům poskytnout vlastní grafické rozhraní, můžete to provést také přepsáním OnPaint metody. Příklad je uvedený níže:

Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)  
   ' Call the OnPaint method of the base class.  
   MyBase.OnPaint(e)  
  
   ' Declare and instantiate a drawing pen.  
   Using myPen As System.Drawing.Pen = New System.Drawing.Pen(Color.Aqua)  
      ' Draw an aqua rectangle in the rectangle represented by the control.  
      e.Graphics.DrawRectangle(myPen, New Rectangle(Me.Location, Me.Size))  
   End Using
End Sub  
protected override void OnPaint(PaintEventArgs e)  
{  
   // Call the OnPaint method of the base class.  
   base.OnPaint(e);  
  
   // Declare and instantiate a new pen.  
   using (System.Drawing.Pen myPen = new System.Drawing.Pen(Color.Aqua))  
   {
      // Draw an aqua rectangle in the rectangle represented by the control.  
      e.Graphics.DrawRectangle(myPen, new Rectangle(this.Location,
         this.Size));  
   }
}  

Předchozí příklad ukazuje, jak vykreslit ovládací prvek s velmi jednoduchou grafickou reprezentací. Volá metodu OnPaint základní třídy, vytvoří objekt Pen, se kterým kreslí, a nakonec nakreslí elipsu v obdélníku určeném Location a Size ovládacího prvku. I když většina vykreslovacího kódu bude výrazně složitější, tento příklad ukazuje použití Graphics objektu obsaženého v objektu PaintEventArgs. Všimněte si, že pokud dědíte z třídy, která již má grafické znázornění, například UserControl nebo Button, a nechcete tuto reprezentaci začlenit do vykreslování, neměli byste volat OnPaint metody základní třídy.

Kód v OnPaint metodě vašeho ovládacího prvku se spustí při prvním vykreslení ovládacího prvku a při každé aktualizaci. Pokud chcete zajistit, aby byl ovládací prvek při každé změně velikosti překreslen, přidejte do konstruktoru ovládacího prvku následující řádek:

SetStyle(ControlStyles.ResizeRedraw, True)  
SetStyle(ControlStyles.ResizeRedraw, true);  

Poznámka

Vlastnost Control.Region použijte k implementaci ne obdélníkového ovládacího prvku.

Viz také