Die Community zu .NET und Classic VB.
Menü

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:

Schwierigkeitsgrad 1

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:

Download des Beispielprojektes [4,45 KB]

' 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 :)