Deklariere im Code "formularglobal" eine Liste für
Referenzen zu den dynamisch erstellten Buttons:
Dim buttonlst As New List(Of Button) Erstelle zwei "spiegelbildliche" Routinen, für die
Übertragung der Button-Daten zwischen Buttons und File:
Private Sub ButtonsToFile()
If buttonlst.Count = 0 Then Exit Sub
Dim ctldaten As New List(Of String)
Dim ctlfields(6) As String
For i As Integer = 0 To buttonlst.Count - 1
With buttonlst(i)
ctlfields(0) = "Button"
ctlfields(1) = .Name
ctlfields(2) = .Text
ctlfields(3) = CStr(.Tag)
ctlfields(4) = CStr(.Top)
ctlfields(5) = CStr(.Left)
ctlfields(6) = CStr(.BackColor.ToString)
End With
ctldaten.Add(String.Join("|", ctlfields))
Next
IO.File.WriteAllLines(ctlfile, ctldaten.ToArray)
End Sub
Private Sub FileToButtons()
If Not IO.File.Exists(ctlfile) Then Exit Sub
buttonlst.Clear()
Dim ctldaten() As String = IO.File.ReadAllLines(ctlfile)
Dim ctlfields(5) As String
For i As Integer = 0 To ctldaten.Length - 1
ctlfields = ctldaten(i).Split("|"c)
If ctlfields.Length = 7 Then
If ctlfields(0) = "Button" Then
Dim btn As New Button
With btn
.Name = ctlfields(1)
.Text = ctlfields(2)
.Tag = ctlfields(3)
.Top = CInt(ctlfields(4).Trim)
.Left = CInt(ctlfields(5).Trim)
.BackColor = _
Color.FromName(ctlfields(6).Trim(" "c, "]"c).Substring( _
7))
.Parent = Me
buttonlst.Add(btn) 'in Liste eintragen
ButtonHandlers(btn) 'Handler erstellen
End With
End If
End If
Next i
End Sub Die Load-Routine des Formulars (Laden):
Private Sub frmDynamic_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
Me.KeyPreview = True
Me.BackColor = Color.LightGray
FileToButtons() 'Buttonangaben lesen
'...... Die FormClosing-Routine (Speichern):
Private Sub frmDynamic_FormClosing(sender As Object, _
e As System.Windows.Forms.FormClosingEventArgs) _
Handles Me.FormClosing
ButtonsToFile()
'...........
End Sub Das Erstellen eines Buttons im MouseDown-Eventhandler:
Private Sub frmDynamic_MouseDown(sender As Object, _
e As System.Windows.Forms.MouseEventArgs) _
Handles Me.MouseDown
If e.Button = Windows.Forms.MouseButtons.Right Then
buttoncounter = buttonlst.Count 'Zähler aus Listenlänge
Dim btn As New Button With _
{.Parent = Me, _
.Location = e.Location, _
.Name = "Dynamic" & CStr(buttoncounter), _
.Tag = CStr(buttoncounter), _
.Text = "Neu" & CStr(.Tag), _
.BackColor = Color.Yellow}
ButtonHandlers(btn)
buttonlst.Add(btn) 'neuer Button: Referenz in Liste
End If Das Verschieben per Maus funktioniert mit dem bereits oben geposteten Code.
Beitrag wurde zuletzt am 21.01.14 um 13:52:20 editiert. |