Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk bemutatja az egyéni vezérlőket, és ismerteti, hogyan különböznek a felhasználói vezérlőktől. Az egyéni vezérlők nem biztosítanak vizuális tervezési felületet, és a felhasználó által megadott kódra támaszkodnak a rajzoláshoz. Ez eltér a felhasználói vezérlőktől, amelyek vizuális tervezési felületet biztosítanak több vezérlő egyetlen újrafelhasználható egységbe való csoportosításához.
Egyéni vezérlőket akkor használunk, ha egy meglévő vezérlő vagy felhasználói vezérlő nem közelíti meg a szükséges felhasználói felületet vagy interaktivitást. A teljes megvalósításhoz több erőfeszítést igényelnek. A windowsos űrlapok továbbra is biztosítják a billentyűzet- és egérkezelést, de a működést önre bízjuk. Nincs egyéni vezérlővel ellátott tervezőfelület, mert az összes rajz a OnPaint metódus kódjával történik. Az olyan összetevők, mint például a Timer, továbbra is hozzáadhatók a nem vizuális tervezési felületen keresztül.
Alaposztály
Egyéni vezérlő létrehozásakor két alaposztály közül választhat:
-
Ez ugyanaz az alaposztály, amelyet más Windows Forms-vezérlők is használnak. A vezérlő bemenetét és kimenetét közvetlenül szabályozhatja.
System.Windows.Forms.ScrollableControl
Egyes Windows Forms-vezérlők ezt az alaposztályt használják. Ez az osztály a tartalom görgetésének lehetőségével bővül
Control
.
Ha nem szeretné görgetni az egyéni vezérlő tartalmát, használja Control
alaposztályként.
Örökölt képességek
Mivel az egyéni vezérlők alaposztálya az Control, automatikusan örökli az összes vezérlő által megosztott Windows Forms-funkciókat. Az alábbiakban bemutatunk néhányat az egyéni vezérlők által nyújtott lehetőségek közül:
- Billentyűzet- és egérbemenet.
- Elrendezési viselkedések, például rögzítés és dokkolás.
- A lapozás támogatása.
- Minimális és maximális méretkorlátozások.
Festmény
A festés, amely a vezérlő vizualizációjának rajzolását jelenti, a OnPaint függvény felülírásával valósítható meg. A vezérlők festésének módjáról további információt a Vezérlők festése és rajzolás című témakörben talál.
Ha egyéni vezérlőt hoz létre a Visual Studio-sablonokkal, a OnPaint
metódus automatikusan felül lesz bírálva. A sablon ezt azért teszi, mert meg kell írnia a kódot a vezérlő rajzolásához. Íme egy példa a sablon által generált adatokra:
public partial class CustomControl1 : Control
{
public CustomControl1()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
}
}
Public Class CustomControl1
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(e)
'Add your custom paint code here
End Sub
End Class
A OnPaint metódussal festjük az egyéni vezérlőt. A metódus egyetlen argumentuma egy PaintEventArgs objektum, amely a vezérlő megjelenítéséhez szükséges összes információt és funkciót biztosítja.
PaintEventArgs
két tulajdonságot biztosít, amelyek a vezérlő renderelésére szolgálnak:
PaintEventArgs.ClipRectangle— A vezérlő azon részét jelöli, amelyet újra kell rajzolni. Ez lehet a vezérlő egésze vagy annak egy része.
Graphics— A vezérlő grafikus felületét jelöli. Számos grafikus orientált objektumot és metódust biztosít, amelyek biztosítják a vezérlő rajzolásához szükséges funkciókat.
A OnPaint
metódust akkor hívják meg, ha a vezérlőt a képernyőn rajzolják vagy frissítik, és az PaintEventArgs.ClipRectangle
objektum azt a téglalapot jelöli, amelyben a festés történik. Ha a teljes vezérlőt frissíteni kell, PaintEventArgs.ClipRectangle
a teljes vezérlő méretét jelöli. Ha a vezérlőnek csak egy részét kell frissíteni, csak azt a régiót jelöli, amelyet újra kell helyezni. Ilyen eset lehet például, ha egy vezérlőt részben eltakar egy másik vezérlő a felhasználói felületen, és amikor a másik vezérlőt elmozdítják, az alatta lévő vezérlő újonnan láthatóvá vált részét újra kell rajzolni.
A vezérlő metódusában szereplő OnPaint kód a vezérlő első rajzolásakor és az érvénytelenítéskor fut. Annak érdekében, hogy a vezérlő minden átméretezésekor újra legyen rajzolva, adja hozzá a következő sort a vezérlő konstruktorához:
SetStyle(ControlStyles.ResizeRedraw, true);
SetStyle(ControlStyles.ResizeRedraw, True)
példa
Az alábbi kódrészlet egy egyéni vezérlő, amely több színes téglalapot jelenít meg a vezérlő széle körül.
protected override void OnPaint(PaintEventArgs pe)
{
Rectangle rect = this.ClientRectangle;
// Bring the width/height in by 1 pixel so the rectangle is drawn inside the control.
// Otherwise, it kind of overlaps the outside edge.
rect.Width -= 1;
rect.Height -= 1;
Pen[] colorPens = new Pen[] { Pens.Blue, Pens.BlueViolet,
Pens.AliceBlue, Pens.CornflowerBlue,
Pens.Cyan, Pens.DarkCyan };
foreach (Pen pen in colorPens)
{
pe.Graphics.DrawRectangle(pen, rect);
rect.Inflate(-1, -1);
}
// Raise the Paint event so users can custom paint if they want.
base.OnPaint(pe);
}
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
Dim rect As Rectangle = Me.ClientRectangle
'Bring the width/height in by 1 pixel so the rectangle is drawn inside the control.
'Otherwise, it kind of overlaps the outside edge.
rect.Width -= 1
rect.Height -= 1
Dim colorPens As Pen() = {Pens.Blue, Pens.BlueViolet,
Pens.AliceBlue, Pens.CornflowerBlue,
Pens.Cyan, Pens.DarkCyan}
For Each curPen As Pen In colorPens
e.Graphics.DrawRectangle(curPen, rect)
rect.Inflate(-1, -1)
Next
'Raise the Paint event so users can custom paint if they want.
MyBase.OnPaint(e)
End Sub
Az előző kód létrehoz egy vezérlőt, amely a következő képhez hasonlóan néz ki:
Háttér
Figyelje meg, hogy a vezérlő háttere a színnel SystemColors.Control van festve, annak ellenére, hogy a OnPaint
kód nem törli vagy nem tölti ki a vezérlőt színnel. A hátteret valójában a OnPaintBackground(PaintEventArgs) metódus festi, mielőtt meghívnák a OnPaint
-et.
OnPaintBackground
felülírása a vezérlő hátterének rajzolásához. Ennek a módszernek az alapértelmezett implementációja az, hogy megrajzolja a BackColor tulajdonság által beállított színt és a BackgroundImage tulajdonság által beállított képet.
Kapcsolódó tartalom
.NET Desktop feedback