Hallo,
in diesem Tutorial will ich auch zeigen wie man ganz einfach seine eigene Progressbar erstellen kann.
Was ich auch in diesem Tut zeige lässt sich auch ganz einfach auf andere controls wie Buttons oder lables anwenden.
Als erstes erstellt ihr euch eine neue Klassenbibliothek
In dieser löscht ihr dann "Class1.vb".
Danach fügt ihr eurem Projekt ein neues Benutzersteuerelement hinzu(Projekt-->Benutzersteuerelement hinzufügen) und nennt es MyProgressbar (ihr könnt es auch anders nennen nur nicht "Progressbar")
als nächstes fügt ihr die benötigten Verweise hinzu und importiert diese.
Dann lasst ihr eure control von Progressbar ergen
(wenn euch vs jetzt einen fehler bringt geht einfach auf das rote Ausrufezeichen und wählt den oberen Vorschlag)
Als nächstes löschen wir im Designer das Sub InitializeComponent()
Disen teil einfach löschen
Als nächstes erstellt ihr das sub New
Nun kommen wir zum Zeichnen der Control: Alles Nachfolgende schreibt ihr in das Sub:
Zunächst müssen wir festlegen mit welcher Qualität wir zeichnen wollen: in unserem fall "High Quality"
Als nächstes deffinieren wir alle variablen die wir zum Zeichnen brauchen:
Nun zeichnen wir den Hintergrund:
Als nächstes den Balken:
Und zum schluss den GlasEffect:
So hier nochmal der der gesamte code Zusammengefasst:
Um die controll zu verwenden Erstellt ihr das Projekt und geht in VS einfach auf Extras-->Toolboxelemente hinzufügen und fügt die Dll dieses Projektes hinzu.
Dieses Tut ist nicht als C&P quelle gedacht sondern soll die grundlegende Vorgehensweise beim Erstellen eines eigenen Controls zeigen.
in diesem Tutorial will ich auch zeigen wie man ganz einfach seine eigene Progressbar erstellen kann.
Was ich auch in diesem Tut zeige lässt sich auch ganz einfach auf andere controls wie Buttons oder lables anwenden.
Als erstes erstellt ihr euch eine neue Klassenbibliothek
In dieser löscht ihr dann "Class1.vb".
Danach fügt ihr eurem Projekt ein neues Benutzersteuerelement hinzu(Projekt-->Benutzersteuerelement hinzufügen) und nennt es MyProgressbar (ihr könnt es auch anders nennen nur nicht "Progressbar")
als nächstes fügt ihr die benötigten Verweise hinzu und importiert diese.
- System.Drawing
- System.Drawing.Drawing2D
- System.ComponentModel
- System.Windows.Forms
Dann lasst ihr eure control von Progressbar ergen
(wenn euch vs jetzt einen fehler bringt geht einfach auf das rote Ausrufezeichen und wählt den oberen Vorschlag)
Als nächstes löschen wir im Designer das Sub InitializeComponent()
VB.NET-Quellcode
- 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
- 'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
- 'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
- _
- Private Sub InitializeComponent()
- components = New System.ComponentModel.Container()
- Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
- End Sub
Als nächstes erstellt ihr das sub New
VB.NET-Quellcode
- Public Sub New()
- MyBase.New()
- MyBase.SetStyle(ControlStyles.UserPaint, True) 'Der controll sagen das wir sie zeichnen
- MyBase.SetStyle(ControlStyles.DoubleBuffer, True) 'DoubleBuffer aktivieren
- MyBase.SetStyle(ControlStyles.SupportsTransparentBackColor, True) 'Transparente hintergrundfarbe aktivieren (für diese anwendung nicht zwingend notwendig)
- End Sub
Nun kommen wir zum Zeichnen der Control: Alles Nachfolgende schreibt ihr in das Sub:
Zunächst müssen wir festlegen mit welcher Qualität wir zeichnen wollen: in unserem fall "High Quality"
Als nächstes deffinieren wir alle variablen die wir zum Zeichnen brauchen:
VB.NET-Quellcode
- 'Höhe des Hintergrundes
- Dim HintergrundH As Integer = MyBase.ClientRectangle.Height
- 'Breite des Hintergrundes
- Dim HintergrundB As Integer = MyBase.ClientRectangle.Width
- 'Höhe des Anzeigebalkens
- Dim BalkenH As Integer = MyBase.ClientRectangle.Height
- 'Differenz zwischen Maximum und Minimun
- Dim Diff As Integer = MyBase.Maximum - MyBase.Minimum
- 'Breite des Anzeigebalkens
- Dim BalkenB As Integer = CInt((HintergrundB / Diff) * Value)
- 'Obere Hintergrundfarbe (Dunkles Grau)
- Dim HintergrundfarbeOben As Color = Color.DimGray
- 'Untere Hintergrundfarbe (Helles Grau)
- Dim HintergrundfarbeUnten As Color = Color.DarkGray
- 'Obere Balkenfarbe (Helles Grün)
- Dim BalkenfarbeOben As Color = Color.Lime
- 'Untere Balkenfarbe (Dunkles Grün)
- Dim BalkenfarbeUnten As Color = Color.Green
- 'Oberes weiß für das Glas
- Dim GlasOben As Color = Color.FromArgb(100, 255, 255, 255)
- 'Unteres weiß für das Glas
- Dim GlasUnten As Color = Color.FromArgb(40, 255, 255, 255)
- 'Brush für den Hintergrund
- Dim HintergrundBrush As New LinearGradientBrush(New Point(0, 0), New Point(0, HintergrundH), HintergrundfarbeOben, HintergrundfarbeUnten)
- 'Brush für den Balken
- Dim Balkenbrush As New LinearGradientBrush(New Point(0, 0), New Point(0, BalkenH), BalkenfarbeOben, BalkenfarbeUnten)
- 'Brush für das Glas
- Dim glass As New LinearGradientBrush(New Point(0, 0), New Point(0, BalkenH), GlasOben, GlasUnten)
Nun zeichnen wir den Hintergrund:
Als nächstes den Balken:
Und zum schluss den GlasEffect:
So hier nochmal der der gesamte code Zusammengefasst:
VB.NET-Quellcode
- Option Strict On
- Imports System.Drawing
- Imports System.Drawing.Drawing2D
- Imports System.ComponentModel
- Imports System.Windows.Forms
- Public Class MyProgressbar
- Inherits ProgressBar 'Die Control von Progressbar erben lassen
- Public Sub New()
- MyBase.New()
- MyBase.SetStyle(ControlStyles.UserPaint, True) 'Der controll sagen das wir sie zeichnen
- MyBase.SetStyle(ControlStyles.DoubleBuffer, True) 'DoubleBuffer aktivieren
- MyBase.SetStyle(ControlStyles.SupportsTransparentBackColor, True) 'Transparente hintergrundfarbe aktivieren (für diese anwendung nicht zwingend notwendig)
- End Sub
- Private Sub Grafik(ByVal sender As Object, ByVal e As PaintEventArgs) Handles MyBase.Paint
- 'Einstellen dass die balken und linien mit hoher Qualität gezeichnet werden
- e.Graphics.SmoothingMode = SmoothingMode.HighQuality
- 'Höhe des Hintergrundes
- Dim HintergrundH As Integer = MyBase.ClientRectangle.Height
- 'Breite des Hintergrundes
- Dim HintergrundB As Integer = MyBase.ClientRectangle.Width
- 'Höhe des Anzeigebalkens
- Dim BalkenH As Integer = MyBase.ClientRectangle.Height
- 'Differenz zwischen Maximum und Minimun
- Dim Diff As Integer = MyBase.Maximum - MyBase.Minimum
- 'Breite des Anzeigebalkens
- Dim BalkenB As Integer = CInt((HintergrundB / Diff) * Value)
- 'Obere Hintergrundfarbe (Dunkles Grau)
- Dim HintergrundfarbeOben As Color = Color.DimGray
- 'Untere Hintergrundfarbe (Helles Grau)
- Dim HintergrundfarbeUnten As Color = Color.DarkGray
- 'Obere Balkenfarbe (Helles Grün)
- Dim BalkenfarbeOben As Color = Color.Lime
- 'Untere Balkenfarbe (Dunkles Grün)
- Dim BalkenfarbeUnten As Color = Color.Green
- 'Oberes weiß für das Glas
- Dim GlasOben As Color = Color.FromArgb(100, 255, 255, 255)
- 'Unteres weiß für das Glas
- Dim GlasUnten As Color = Color.FromArgb(40, 255, 255, 255)
- 'Brush für den Hintergrund
- Dim HintergrundBrush As New LinearGradientBrush(New Point(0, 0), New Point(0, HintergrundH), HintergrundfarbeOben, HintergrundfarbeUnten)
- 'Brush für den Balken
- Dim Balkenbrush As New LinearGradientBrush(New Point(0, 0), New Point(0, BalkenH), BalkenfarbeOben, BalkenfarbeUnten)
- 'Brush für das Glas
- Dim glass As New LinearGradientBrush(New Point(0, 0), New Point(0, BalkenH), GlasOben, GlasUnten)
- 'Zeichnen des Hintergrundes
- e.Graphics.FillRectangle(HintergrundBrush, 0, 0, HintergrundB, HintergrundH)
- 'Zeichnen des Balken
- e.Graphics.FillRectangle(Balkenbrush, 0, 0, BalkenB, BalkenH)
- 'Zeichnen des GlasEffects
- e.Graphics.FillRectangle(glass, 0, 0, BalkenB, CInt(BalkenH / 3))
- End Sub
- End Class
Um die controll zu verwenden Erstellt ihr das Projekt und geht in VS einfach auf Extras-->Toolboxelemente hinzufügen und fügt die Dll dieses Projektes hinzu.
Dieses Tut ist nicht als C&P quelle gedacht sondern soll die grundlegende Vorgehensweise beim Erstellen eines eigenen Controls zeigen.
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Wulf“ ()