Die Community zu .NET und Classic VB.
Menü

Tipp-Upload: VB.NET 0140: VB2003: Steuerelementefelder-Ersatz

 von 

Hinweis zum Tippvorschlag  

Dieser Vorschlag wurde noch nicht auf Sinn und Inhalt überprüft und die Zip-Datei wurde noch nicht auf schädlichen Inhalt hin untersucht.
Bitte haben Sie ein wenig Geduld, bis die Freigabe erfolgt.

Über den Tipp  

Dieser Vorschlag soll VB.NET Tipp 0048 ersetzen.

Dieser Tippvorschlag ist noch unbewertet.

Der Vorschlag ist in den folgenden Kategorien zu finden:

  • Steuerelemente

Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
Steuerelementefeld, AddHandler

Der Vorschlag wurde erstellt am: 05.11.2007 15:04.
Die letzte Aktualisierung erfolgte am 08.04.2008 13:50.

Zurück zur Übersicht

Beschreibung  

Viele Umsteiger von VB-Classic vermissen in VB.NET designer-unterstützte Steuerelementefelder.
Mit etwas Umdenken aber tun sich gleichwertige oder auch bessere Alternativen auf.
Dieser Tipp zeigt eine Möglichkeit, viele Steuerelemente zu verwalten.
Die zu behandelnden Ereignisse werden per AddHandler auf geeignete Methoden geleitet.
Prinzipiell ist beim Auftreten vieler Steuerelemente jedoch zu überlegen, ob ein Grid die Aufgabe nicht ressourcenschonender erledigen könnte.
Siehe auch Tutorial 5503, welches das Thema ausführlich behandelt.

Anmerkungen hierzu bitte unter:
http://foren.activevb.de/cgi-bin/foren/view.pl?forum=13&root=1465&msg=1465

Schwierigkeitsgrad

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

Download:

Download des Beispielprojektes [5,82 KB]

' Dieser Source 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!
'
' Beachten Sie, das vom Designer generierter Code hier ausgeblendet wird.
' In den Zip-Dateien ist er jedoch zu finden.

' ------- Anfang Projektgruppe Steuerelementefeld.sln  -------
' ------ Anfang Projektdatei Steuerelementefeld.vbproj  ------
' ------------------ Anfang Datei Form2.vb  ------------------
' Projekteinstellungen: Option Strict On, Option Explicit On

Imports System.Drawing

Public Class Form2

    Inherits System.Windows.Forms.Form

#Region " Vom Windows Form Designer generierter Code "

    Public Sub New()

        MyBase.New()

        ' Dieser Aufruf ist für den Windows Form-Designer erforderlich.
        InitializeComponent()

        ' Initialisierungen nach dem Aufruf InitializeComponent() hinzufügen

    End Sub

    ' Die Form überschreibt den Löschvorgang der Basisklasse, um Komponenten zu bereinigen.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)

        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If

        MyBase.Dispose(disposing)

    End Sub

    ' Für Windows Form-Designer erforderlich
    Private components As System.ComponentModel.IContainer

    ' HINWEIS: Die folgende Prozedur ist für den Windows Form-Designer erforderlich
    ' Sie kann mit dem Windows Form-Designer modifiziert werden.
    ' Verwenden Sie nicht den Code-Editor zur Bearbeitung.
    Friend WithEvents Panel1 As System.Windows.Forms.Panel
    Friend WithEvents Label1 As System.Windows.Forms.Label
    Friend WithEvents lbIndex As System.Windows.Forms.Label

    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

        Me.Panel1 = New System.Windows.Forms.Panel
        Me.Label1 = New System.Windows.Forms.Label
        Me.lbIndex = New System.Windows.Forms.Label
        Me.SuspendLayout()

        '
        ' Panel1
        '
        Me.Panel1.BackColor = System.Drawing.Color.Gray
        Me.Panel1.Dock = System.Windows.Forms.DockStyle.Left

        Me.Panel1.Font = New System.Drawing.Font("Arial", 12.0!, _
            System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))

        Me.Panel1.ForeColor = System.Drawing.Color.Lime
        Me.Panel1.Location = New System.Drawing.Point(0, 0)
        Me.Panel1.Name = "Panel1"
        Me.Panel1.Size = New System.Drawing.Size(248, 373)
        Me.Panel1.TabIndex = 0

        '
        ' Label1
        '
        Me.Label1.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, _
            System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))

        Me.Label1.Location = New System.Drawing.Point(264, 8)
        Me.Label1.Name = "Label1"
        Me.Label1.Size = New System.Drawing.Size(144, 32)
        Me.Label1.TabIndex = 1
        Me.Label1.Text = "highlighted Index:"
        Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter

        '
        ' lbIndex
        '
        Me.lbIndex.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, _
            System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))

        Me.lbIndex.Location = New System.Drawing.Point(416, 8)
        Me.lbIndex.Name = "lbIndex"
        Me.lbIndex.Size = New System.Drawing.Size(96, 32)
        Me.lbIndex.TabIndex = 2
        Me.lbIndex.Text = "none"
        Me.lbIndex.TextAlign = System.Drawing.ContentAlignment.MiddleLeft

        '
        ' Form2
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(512, 373)
        Me.Controls.Add(Me.lbIndex)
        Me.Controls.Add(Me.Label1)
        Me.Controls.Add(Me.Panel1)
        Me.Name = "Form2"
        Me.Text = "Form2"
        Me.ResumeLayout(False)

    End Sub

#End Region

    Private Sub Form2_Load(ByVal sender As Object, ByVal e As EventArgs)Handles MyBase.Load

        Const RowHeight As Integer = 30
        Const ColumnCount As Integer = 6
        Const Padding As Integer = 2

        Dim ColumnWidth As Integer = Me.Panel1.Width \ ColumnCount

        For I As Integer = 0 To 122

            Dim X As Integer = I Mod ColumnCount
            Dim Y As Integer = I \ ColumnCount
            Dim LB As New Label

            With LB

                ' Font, ForeColor, BackColor der Labels werden vom Container übernommen, auf
                ' dem sie aufsitzen
                ' Können also im Designer an Panel1 eingestellt werden
                .TextAlign = ContentAlignment.MiddleCenter
                .Text = (I + 1).ToString
                .Location = New Point(X * ColumnWidth + Padding, Y * RowHeight + Padding)
                .Size = New Size(ColumnWidth - 2 * Padding, RowHeight - 2 * Padding)
                .BorderStyle = BorderStyle.FixedSingle

                ' Ereignisbehandlung dynamisch hinzufügen
                AddHandler .MouseEnter, AddressOf LB_MouseEnter
                AddHandler .MouseLeave, AddressOf LB_MouseLeave
            End With

            Me.Panel1.Controls.Add(LB)
        Next

    End Sub

    Private Sub LB_MouseEnter(ByVal sender As Object, ByVal e As EventArgs)

        Dim LB As Label = DirectCast(sender, Label)

        LB.ForeColor = Color.Red

        ' (wozu eigentlich den Index ermitteln, wenn man das Control selbst hat?)
        Me.lbIndex.Text = LB.Parent.Controls.IndexOf(LB).ToString

    End Sub

    Private Sub LB_MouseLeave(ByVal sender As Object, ByVal e As EventArgs)

        Dim LB As Label = DirectCast(sender, Label)

        LB.ForeColor = Me.Panel1.ForeColor
        Me.lbIndex.Text = "none"

    End Sub

End Class

' ------------------- Ende Datei Form2.vb  -------------------
' ------- Ende Projektdatei Steuerelementefeld.vbproj  -------
' -------- Ende Projektgruppe Steuerelementefeld.sln  --------

	

Diskussion  

Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.

Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.