Hallo!
Im MouseDown-Event der Form wird die Maus-Position gemeldet.
An dieser Stelle kann ein Button platziert werden.
Wie das geht (incl. Addhandler) zeigen dir Beiträge, die die
Foren-Suchmaschine liefert.
Die zugehörige Ereignisbehandlungsroutine sollte bereits
als Code vorhanden sein (passende Signatur).
Den (vom Benutzer eingegebenen?) Link weist Du einer
Variable zu, die in der Ereignisroutine vorgesehen ist.
Die entsprechenden Angaben zum dynamisch erstellten Control
speicherst Du in einer Datei (Location, Text, Link) und liest
sie beim Programmstart ein - erstellst, positionierst den Button
Soll der Button neu positioniert werden, sind lediglich seine
Eigenschaften zu setzen (z.B. Top, Left).
Public Class frmDynamic
Dim buttoncounter As Integer
Dim ctlfile As String = "C:\daten\controls.txt"
Private Sub frmDynamic_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
If Not IO.File.Exists(ctlfile) Then Exit Sub
'Gespeicherte Buttons erstellen
Dim ctlDaten() As String = IO.File.ReadAllLines(ctlfile)
For i As Integer = 0 To ctlDaten.Length - 1
If ctlDaten(i).StartsWith("Button") Then
buttoncounter += 1
Dim angaben() As String = ctlDaten(i).Split("|"c)
Dim t As Integer = CInt(angaben(1))
Dim l As Integer = CInt(angaben(2))
Dim btn As New Button With _
{.Parent = Me, .Top = t, .Left = l, _
.Text = "Neu", _
.Tag = CStr(buttoncounter)}
AddHandler btn.Click, AddressOf ButtonNeu_Click
End If
Next i
End Sub
Private Sub frmDynamic_MouseDown(sender As Object, _
e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
If e.Button = Windows.Forms.MouseButtons.Right Then
'neuen Button erstellen
buttoncounter += 1
Dim btn As New Button With _
{.Parent = Me, .Location = e.Location, _
.Text = "Neu", _
.Tag = buttoncounter}
'Angaben zum Button speichern
If Not IO.File.Exists(ctlfile) Then _
IO.File.Create(ctlfile)
Dim ctlDaten() As String = _
IO.File.ReadAllLines(ctlfile)
Array.Resize(ctlDaten, ctlDaten.Length + 1)
ctlDaten(ctlDaten.Length - 1) = _
"Button | " & CStr(btn.Top) & " | " & _
CStr(btn.Left) & " | " & btn.Text
'Click-Ereignis: Routine zuordnen
AddHandler btn.Click, AddressOf ButtonNeu_Click
IO.File.WriteAllLines(ctlfile, ctlDaten)
End If
End Sub
Private Sub ButtonNeu_Click(sender As System.Object, _
e As System.EventArgs)
Dim buttontag As Integer = CInt(CType(sender, Button).Tag)
MsgBox("Button Nummer " & CStr(buttontag))
End Sub
End Class
Beitrag wurde zuletzt am 20.01.14 um 14:20:59 editiert. |