Ovládací prvky vykreslované uživatelem

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.

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

  • ClipRectangle object - 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 object - zapouzdřuje několik grafických objektů a metod, které poskytují funkce potřebné k vykreslení ovládacího prvku.

Další informace o objektu Graphics a jeho použití naleznete v tématu Postupy: 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 ClipRectangle objekt představuje obdélník, ve kterém se obraz provede. Pokud je potřeba aktualizovat celý ovládací prvek, ClipRectangle bude představovat velikost celého ovládacího prvku. Pokud je však potřeba aktualizovat pouze část ovládacího prvku, bude objekt představovat pouze oblast, ClipRectangle 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 Control třídy je nutné přepsat metodu OnPaint a poskytnout kód vykreslování grafiky 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 najdete 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ří Pen objekt, se kterým se má nakreslit, a nakonec nakreslí tři tečky v obdélníku určeném ovládacím Location prvku a Size ovládacím prvku. I když většina vykreslovacího kódu bude výrazně složitější, tento příklad ukazuje použití objektu Graphics 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 Buttona nechcete tuto reprezentaci začlenit do vykreslování, neměli byste volat metodu OnPaint 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:

Control.Region Vlastnost použijte k implementaci neúdvoúhlého ovládacího prvku.

Viz také