Tipp-Upload: VB.NET 0140: VB2003: Steuerelementefelder-Ersatz
von Spatzenkanonier
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.
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 |
Verwendete API-Aufrufe: |
Download: |
' 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.