Rubrik: Controls | VB-Versionen: VB.NET | 02.01.04 |
PropertyGrid - Eigenschaften (VB.NET) Eigenschaften von Objekten mit einem PropertyGrid ändern | ||
Autor: Alex Furrer (afu) | Bewertung: | Views: 25.122 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
PropertyGrid - die kompakte Art Eigenschaften zu ändern, auch im eigenen Programm und während der Laufzeit. Zum besseren Verständnis wird eine "Region" mit Ihren Eigenschaften erzeugt, die auf eine Picturebox gezeichnet wird. Klickt man in diese Region werden die Eigenschaften der Region angezeigt, ansonsten die der Picturebox.
Starten Sie ein neues Projekt (Windows-Anwendung) und aktivieren das "PropertyGrid", falls dieses noch nicht in der Toolbox vorhanden ist. Klicken Sie hierzu mit der rechten Maustaste auf die Toolbox und wählen aus dem Kontextmenü den Befehl Elemente hinzufügen/entfernen.... Im darauf erscheinenden Dialog aktivieren Sie aus der Liste der .NET Framework-Komponenten den Eintrag PropertyGrid und klicken dann auf OK.
Ziehen Sie auf die Form ein PictureBox-Control (Picture1) mit folgenden Eigenschaften:
- Size: 400;300
- Borderstyle: Fixed3D
Platzieren Sie unterhalb der PictureBox einen CommandButton (Button1) mit der Beschriftung Zeichnen.
Ziehen Sie jetzt noch das PropertyGrid-Control auf die Form (am besten rechts von der PictureBox).
In den Codeteil der Form schreiben Sie als Erstes:
Imports System.ComponentModel Imports System.Drawing.Drawing2D
Dann deklarieren Sie die benötigten Variablen:
Public Pkt(4) As Point ' 5 Eckpunkte der Region Public myReg As Region ' Region Public myPath As GraphicsPath ' Grafik Pfad Public oMeineRegion As MeineRegion ' Objekt meine Region Public g As System.Drawing.Graphics ' Grafik
Im Form_Load Ereignis fügen Sie folgenden Code ein:
Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Dim I As Byte myPath = New GraphicsPath Pkt(4) = New Point Pkt(0).X = 100 Pkt(0).Y = 10 Pkt(1).X = 150 Pkt(1).Y = 20 Pkt(2).X = 100 Pkt(2).Y = 200 Pkt(3).X = 200 Pkt(3).Y = 100 Pkt(4).X = 200 Pkt(4).Y = 10 For I = 0 To 3 myPath.AddLine(Pkt(I), Pkt(I + 1)) ' alle Punkte zu einem Pfad zusammenhängen Next myPath.AddLine(Pkt(I), Pkt(0)) ' letzter und erster Punkt verbinden myReg = New [Region](myPath) ' Region erzeugen oMeineRegion = New MeineRegion ' neues Objekt oMeineRegion.FüllFarbe = Color.Blue ' Standard Werte des Objekt oMeineRegion.RahmenFarbe = Color.Red oMeineRegion.Schrift = Me.Font End Sub
Den nachfolgenden Code bitte ebenfalls in den Codeteil der Form einfügen:
Private Sub PropertyGrid1_PropertyValueChanged(ByVal s As Object, _ ByVal e As System.Windows.Forms.PropertyValueChangedEventArgs) _ Handles PropertyGrid1.PropertyValueChanged ' wenn in PropertyGrid1 wert geänder dann neuzeichnen Call Button1_Click(Nothing, Nothing) End Sub
Private Sub PictureBox1_MouseDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) _ Handles PictureBox1.MouseDown ' wurde in Region geklickt? If myReg.IsVisible(e.X, e.Y) Then Beep() ' Region in PropertyGrid1 anzeigen PropertyGrid1.SelectedObject = oMeineRegion Else ' Blatt in PropertyGrid1 anzeigen PropertyGrid1.SelectedObject = PictureBox1 End If End Sub
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim I As Byte Dim g As Graphics g = PictureBox1.CreateGraphics ' Region-Füllung zeichnen g.FillPath(New SolidBrush(oMeineRegion.FüllFarbe), myPath) ' Region-Rahmen zeichnen g.DrawPath(New Pen(oMeineRegion.RahmenFarbe), myPath) If oMeineRegion.NrAnzeigen = True Then ' wenn Nummer anzeigen For I = 0 To 4 g.DrawString(I, oMeineRegion.Schrift, _ New SolidBrush(oMeineRegion.FüllFarbe), _ Pkt(I).X, Pkt(I).Y) Next End If End Sub
Nach der Anweisung End Class von Form1 muss folgender Code eingefügt werden:
Public Class MeineRegion Private adFüllFarbe As Color Private adRahmenFarbe As Color Private adSchrift As Font Private adNrAnzeigen As Boolean Private adBezeichnung As String <Description("Schriftart zum Nummerieren der Ecken"), Category("Region")> _ Property Schrift() As Font Get Return adSchrift End Get Set(ByVal SetSchrift As Font) adSchrift = SetSchrift End Set End Property <Description("Nummern anzeigen?"), Category("Region")> _ Property NrAnzeigen() As Boolean Get Return adNrAnzeigen End Get Set(ByVal SetNrAnzeigen As Boolean) adNrAnzeigen = SetNrAnzeigen End Set End Property <Description("Farbe zum Füllen der Region"), Category("Region")> _ Property FüllFarbe() As Color Get Return adFüllFarbe End Get Set(ByVal SetFüllFarbe As Color) adFüllFarbe = SetFüllFarbe End Set End Property <Description("Farbe des Rahmen der Region"), Category("Region")> _ Property RahmenFarbe() As Color Get Return adRahmenFarbe End Get Set(ByVal SetRahmenFarbe As Color) adRahmenFarbe = SetRahmenFarbe End Set End Property <Description("Bezeichnung der Region"), Category("Region")> _ Property Bezeichnung() As String Get Return adBezeichnung End Get Set(ByVal SetBezeichnung As String) adBezeichnung = SetBezeichnung End Set End Property End Class
Das war's. Starten Sie das Projekt und klicken auf den Button Zeichnen. Klicken Sie anschließend in das gezeichnete Fünfeck. Die Eigenschaften für die Füllfarbe usw. kann jetzt bequem über das "eigene PropertyGrid" geändert werden. Klicken Sie nun auf einen freien Bereich der PictureBox. Et voilà: auch die PictureBox-Eigenschaften können bequem über das PropertyGrid zur Laufzeit geändert werden.