[Visual Basic] Eigener Button

08/25/2012 00:18 LaMiy#1
Hier zeige ich euch mal, wie ihr in VB 2010 einen eigenen Button erstellen könnt.

[Only registered and activated users can see links. Click Here To Register...]

Zuerst erstellt ihr ein neues Projekt, undzwar eine Klassenbibliothek.
Die könnt ihr nennen, wie ihr möchtet.
Nun fügt ihr die Verweise:
Code:
System.Windows.Forms.Dll 
System.Drawing
..hinzu.
Diese findet ihr normal in dem Ordner:
"
Code:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0
"

[Only registered and activated users can see links. Click Here To Register...]

Nun schreibt ihr da wo Class1 steht einen belibigen Namen eures Controls hin.
z.B "Button2"

Als nächstes importiert ihr:
Code:
Imports System.Windows.Forms
Imports System.Drawing
Imports System.Drawing.Drawing2D
und davor schaltet ihr:
Code:
Option Strict On
Jetzt schreibt ihr in eure Klasse:
Code:
 Inherits System.Windows.Forms.Button
Und gebt damit eurem Control den "Status" und die Funktion eines Buttons.

Nun machen wir uns 3 Properties:
Code:
   Public Property Color_1 As Color = Color.Red
    Public Property Color_2 As Color = Color.Red
    Public Property Text_1 As String = "Hallo"
Damit fügen wir in unserem Eigenschaftenfenster Die Funktionen:
Code:
Color_1 
Color_2
Text_1
...ein
[Only registered and activated users can see links. Click Here To Register...]


Nun schreiben wir einen Sub, in dem wir mit GDI zeichnen:
Code:
  Protected Overrides Sub onPaint(ByVal e As PaintEventArgs)
Code:
 MyBase.OnPaint(e)
schreiben wir als Erstes.

Dann bestimmen wir die Größe unseres Objekts:
Code:
  Dim größe As New Rectangle(0, 0, Me.Width, Me.Height)
Anschließend Optionen für den Text:
Code:
      Dim fnt As New Font("Arial", 10)
Danach wieder etwas für den Text:
Code:
    Dim sz As SizeF = e.Graphics.MeasureString(Text_1, fnt)
Nun die Umrandung des Buttons:
Code:
   Dim pn As New Pen(New SolidBrush(Color.Black), 2)
Jetzt lassen wir uns das Ganze hiermit anzeigen:
Code:
  Using lgb As New LinearGradientBrush(größe, Color_1, Color_2, LinearGradientMode.BackwardDiagonal)
            e.Graphics.FillRectangle(lgb, größe)
            e.Graphics.DrawRectangle(pn, 0, 0, Me.Width, Me.Height)
            e.Graphics.DrawString(Text_1, fnt, Brushes.Black, (Me.Width - sz.Width) / 2, (Me.Height - sz.Height) / 2)
        End Using
Zuerst sagen wir, dass wir einen Farbverlauf wollen. Bei keinem Farbverlauf einfach:
Code:
Color_1 = Color.Black
Color_2 = Color_1
Dann füllen wir ein Rechteck mit diesem Farbverlauf und wählen dabei die Größe und Koordinaten des Buttons.

Anschließend zeichen wir den Rand mit quasi dem selben Schema, zum Schluss wird der Text in die Mitte des Buttons gesetzt. Fertig! Im OnPaint Event kann übrigends ganz viel mit GDI gezeichnet werden...Runde Buttons etc...

Nun wollt ihr ja auch sehen, wie es aussieht. Klickt dafür einmal auf "debuggen". Es kommt ein Fehler, ihr Klickt auf OK und fügt eurem Projekt eine WindowsForm hinzu. Ihr geht in den Form Designer und guckt in die Toolbox. Normal müsstet Ihr auf den ersten Blick euer Control beim gegebenen Namen finden. Einfach auf die Form ziehen und im Eigenschaftenfenster runterscrollen, bis ihr Color_1 etc. findet. Dort könnt ihr nun auswählen, was ihr möchtet.

Zum erstellen einer .DLL geht ihr auf "Erstellen" -> "Projektname erstellen" Und findet eure .DLL nun in der regel bei:
Code:
Visual Studio 2010\Projects\Button_1\Button_1\bin\Debug
Nun könnt ihr eure DLL in eine WindowsFormsAnwendung einbinden, indem ihr in die Toolbox einen Linksklick macht, Auf "ToolboxElemente auswählen" klickt, eure DLL auswählt und das Gnaze bestätigt. Nun findet ihr euren eigenen Button in der ToolBox und könnt ihn wie jeden anderen Button benutzen.

Hier eine von vielen Möglichkeiten:

[Only registered and activated users can see links. Click Here To Register...]

Ich hoffe ich konnte euch etwas helfen :)
Lasst ein "Thanks" da, wenn nicht, auch egal :D
08/25/2012 14:11 P00w#2
Super TUT!
08/27/2012 01:44 DerB0ss#3
Ist mal witzig :D
08/30/2012 18:05 Kraizy​#4
Für sowas gibt es doch extra das Benutzersteuerelement, oder etwa nicht?
08/31/2012 19:33 LaMiy#5
Natürlich, aber der normale Button sieht schrecklich aus :D
08/31/2012 19:40 Kraizy​#6
Da kannst du auch malen^^
sieht am Ende genauso aus, nur find ich geht das viel schneller und einfacher mit einem Benutzersteuerelement.
08/31/2012 20:06 LaMiy#7
Ich finde es so besser, vorallem kannst du es ja in die ToolBox hinzufügen und kannst dann beliebig Farben und so ändern. Es gibt ja nicht nur diese Möglichkeit, im Paint kannst du alles zeichen. Auch runde z.B :) Oder, ka, eine 2D Animation dadrauf :)
08/31/2012 20:10 Kraizy​#8
Genau dafür gibt es das Benutzersteuerelement. Dieses wird danach auch automatisch in der Toolbox angezeigt, dort kannst du auch alles mögliche anpassen, malen, Eigenschaften hinzufügen etc.
08/31/2012 23:14 LaMiy#9
Dann nimm dies, ist im prinzip ja das Selbe :)
Nur das finde ich schöner :)
10/22/2012 23:58 darkoty#10
Ich mache das gerne mit einer Picturebox und stelle da verschiedene Bilder bei MouseEnter, MouseLeave... ein.
10/23/2012 00:02 Kraizy​#11
Quote:
Originally Posted by darkoty View Post
Ich mache das gerne mit einer Picturebox und stelle da verschiedene Bilder bei MouseEnter, MouseLeave... ein.
Dann tu dies bitte nicht mehr.
10/23/2012 08:37 Shawak#12
Quote:
Originally Posted by Kraizy​ View Post
Für sowas gibt es doch extra das Benutzersteuerelement, oder etwa nicht?
.. und ist viel 'schöner'.
01/21/2013 20:48 ҳc3ρ0™#13
schönes Tutorial, gefällt mir sehr gut.

Nur ist der Button in 2D und man sieht nicht ob man ihn gedrückt hat oder nicht :/
01/27/2013 17:34 adistoe#14
Nice TUT.
ABER! Soweit ich weiss, muss die dll dann immer mitgeliefert werden, damit das Programm noch läuft.

Also warum nicht im Projekt eine Klasse schreiben?
Geht meiner Meinung nach besser.

mfg
adistoe