VB.NET-Tipp 0048: Steuerelementefelder simulieren
Beschreibung
Dieses Beispiel richtet sich an alle, die die Steuerelementenfelder aus VB6 vermissen.
Zu diesem Tipp existieren im Tippupload die folgende(n) Aktualisierung(en):
[VB .NET Tippvorschlag 0140] VB2003: Steuerelementefelder-Ersatz
Schwierigkeitsgrad: | Framework-Version(en): .NET Framework 1.0, .NET Framework 1.1, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5 | .NET-Version(en): Visual Basic 2002, Visual Basic 2003, Visual Basic 2005, Visual Basic 2008 | Download: |
' Dieser Quellcode stammt von http://www.activevb.de ' und kann frei verwendet werden. Für eventuelle Schäden ' wird nicht gehaftet. ' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. ' Ansonsten viel Spaß und Erfolg mit diesem Source! ' Projektversion: Visual Studio 2002/2003 ' Option Strict: An ' Option Explicit: An ' ' Referenzen: ' - System ' - System.Data ' - System.Drawing ' - System.Windows.Forms ' - System.XML ' ' Imports: ' - Microsoft.VisualBasic ' - System ' - System.Collections ' - System.Data ' - System.Drawing ' - System.Diagnostics ' - System.Windows.Forms ' ' ############################################################################## ' ################################# Form1.vb ################################### ' ############################################################################## Public Class Form1 Inherits System.Windows.Forms.Form ' Bereitstellung von Objekt-Array Label (123 Elemente) Friend Lab_Array(122) As System.Windows.Forms.Label Private Sub Form1_Resize(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles MyBase.Resize ' pnlHNrn ist ein Panel auf dem die 123 Label angeordnet werden Me.pnlHNrn.Width = Me.Width \ 3 Me.pnlHNrn.Height = Me.Height - 50 End Sub Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load ' Load-Ereignis, welches die Subs zur Erstellung der Steuerelemente ' aufruft Me.LabArrayHNr() End Sub Private Sub LabArrayHNr() ' Variable für Positionen der Steuerelemente (Location) Dim x As Integer = 10, y As Integer = 10 Dim i As Integer = 0 For i = 0 To 122 Me.Lab_Array(i) = New System.Windows.Forms.Label() ' Definiert das Click-Ereignis AddHandler Lab_Array(i).Click, AddressOf Lab_Array_Click ' Definiert das MouseMove-Ereignis AddHandler Lab_Array(i).MouseMove, AddressOf Lab_Array_MouseMove ' Labels zu den Steuerelementen hinzufügen Me.Controls.Add(Me.Lab_Array(i)) 'Panel als Container Me.pnlHNrn.Controls.AddRange( _ New System.Windows.Forms.Control() {Me.Lab_Array(i)}) 'Eigenschaften für die Steuerelemente setzen With Me.Lab_Array(i) .BackColor = System.Drawing.Color.Black .Font = New System.Drawing.Font("Arial", 11.25!, _ System.Drawing.FontStyle.Bold, _ System.Drawing.GraphicsUnit.Point, 0) .ForeColor = System.Drawing.Color.FromArgb(0, 192, 0) .TextAlign = System.Drawing.ContentAlignment.MiddleCenter .Text = CStr(i + 1) .Location = New System.Drawing.Point(x, y) .Size = New System.Drawing.Size(35, 20) End With 'Positionsangaben der Steuerelemente x = x + 35 If x > 200 Then x = 10 y = y + 20 End If Next End Sub Private Sub Lab_Array_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Me.pnlHNrn.Visible = False End Sub Private Sub Lab_Array_MouseMove(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) ' Setzt die Schriftfarbe auf das ursprüngliche Grün Dim i As Integer For i = 0 To 122 Me.Lab_Array(i).ForeColor = System.Drawing.Color.FromArgb(0, 192, 0) Next ' Ruft den Index-Label auf Lab_ArrayNr_MouseMove(sender, e) End Sub Private Sub Lab_ArrayNr_MouseMove(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) 'Index-Steuerelement erstellen Dim Mouse_Move_Label As Label = DirectCast(sender, Label) 'In diesem Fall wird die Schriftfarbe auf Rot gesetzt Mouse_Move_Label.ForeColor = System.Drawing.Color.FromArgb(192, 0, 0) End Sub Private Sub pnlHNrn_MouseMove( _ ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) _ Handles pnlHNrn.MouseMove Dim i As Integer For i = 0 To 122 Me.Lab_Array(i).ForeColor = _ System.Drawing.Color.FromArgb(0, 192, 0) Next End Sub Private Sub MenuItem4_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MenuItem4.Click Me.Close() End Sub Private Sub Form1_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles MyBase.Click Me.pnlHNrn.Visible = True End Sub End Class
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 4 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von Ahlers am 05.11.2007 um 13:31
Der hiesige Code hat m.E. viele designmäßige Schwächen:
1) Resizing-Code ist unter VB.Net i.a. nicht mehr erforderlich. Dieses erledige man durch Setzen der Dock oder Anchor-Property.
2) Die Anzahl der Controls sollte besser in einer Variable gespeichert sein, statt daß überall im Code die Zahlen 122 und 123 auftauchen
3) Man muß nicht in jedem MouseMove auf 123 Controls zugreifen, um eines von ihnen wieder auf grün zurückzusetzen
4) Die Zähler-Variable i sollte nicht klassenweit sichtbar sein
5) jedes neue Label wird erst den Controls des Forms hinzugefügt, und danach den Controls des Panels (wodurch es aus den Controls des Forms wieder entfernt wird)
Zum Thema selbst empfehle Ich sehr das Tutorial 5509 "Steuerelementfelder in VB2005" - http://www.activevb.de/tutorials/tut_vbnetcontrolarrays/vbnetcontrolarray.html - (enthält auch ein Code-Beispiel).
Kommentar von spunky am 20.01.2007 um 15:32
wie kann ich den index auslesen, von dem element was gerade angeklickt wurde?
Kommentar von am 03.11.2006 um 12:02
geht das auch mit contextmenüs?
Kommentar von Jens Scheider am 22.04.2006 um 13:08
Sauber!
Damit kann man endlich den Index von Objekten aus VB6 wieder nutzen.
Guter Tipp :)