vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Button zur Laufzeit erstellen 
Autor: Manfred X
Datum: 20.01.14 22:55

Vielleicht so ....
Public Class frmDynamic
 
    Dim buttoncounter As Integer
    Dim ctlfile As String = "C:\daten\controls.txt"
 
    Dim controlkeypressed As Boolean = False  'Ist die CTRL-Taste gedrückt?
    Dim buttontomove As Button = Nothing   'Referenz: zu bewegender Button
 
 
    Private Sub frmDynamic_Load(sender As System.Object, _
        e As System.EventArgs) Handles MyBase.Load
 
        Me.KeyPreview = True  'Für das Erkennen der CTRL-Taste
        Me.BackColor = Color.LightGray
 
        If Not IO.File.Exists(ctlfile) Then Exit Sub
 
        Dim ctlDaten() As String = IO.File.ReadAllLines(ctlfile)
        Dim c As Integer
        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, _
                     .Tag = CStr(buttoncounter), _
                     .Text = angaben(3)}
                ButtonHandlers(btn)
            End If
        Next
    End Sub
 
 
    'Wenn die CTRL-Taste gedrückt bleibt, 
    'können dynamisch erstellte Buttons bewegt werden
    Private Sub frmDynamic_KeyDown(sender As Object, _
        e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
 
        If e.KeyCode = Keys.ControlKey Then
            Me.BackColor = Color.Gray  'Bewegungsmögl. anzeigen
            controlkeypressed = True
        End If
    End Sub
 
 
    Private Sub frmDynamic_KeyUp(sender As Object, _
           e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
 
        If controlkeypressed Then
            controlkeypressed = False
            Me.BackColor = Color.LightGray
        End If
    End Sub
 
 
    Private Sub ButtonHandlers(ByVal btn As Button)
        'Handler für die dynamisch erstellten Buttons
        AddHandler btn.Click, AddressOf ButtonDyn_Click
        AddHandler btn.MouseDown, AddressOf ButtonDyn_MouseDown
        AddHandler btn.MouseUp, AddressOf ButtonDyn_MouseUp
        AddHandler btn.MouseMove, AddressOf ButtonDyn_MouseMove
    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
            buttoncounter += 1
            Dim btn As New Button With _
                {.Parent = Me, _
                 .Location = e.Location, _
                 .Tag = CStr(buttoncounter), _
                 .Text = "Neu" & CStr(.Tag)}
 
            ButtonHandlers(btn)
 
            If Not IO.File.Exists(ctlfile) Then
                Dim fs As IO.FileStream = IO.File.Create(ctlfile)
                fs.Close()
            End If
 
            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
            IO.File.WriteAllLines(ctlfile, ctlDaten)
 
        End If
 
    End Sub
 
 
    Private Sub ButtonDyn_Click(sender As System.Object, _
                                e As System.EventArgs)
 
        Dim buttontag As Integer = CInt(CType(sender, Button).Tag)
 
        If Not controlkeypressed Then
            MsgBox("Button Nummer " & CStr(buttontag))
        End If
    End Sub
 
 
    Private Sub ButtonDyn_MouseDown(sender As System.Object, _
                           e As MouseEventArgs)
 
        If controlkeypressed Then
            'Referenz auf den zu bewegenden Button notieren
            buttontomove = CType(sender, Button)
        End If
    End Sub
 
 
    Private Sub ButtonDyn_MouseMove(sender As Object, e As MouseEventArgs)
        If buttontomove IsNot Nothing Then
 
            'zu bewegender Button folgt der Maus
 
            Dim loc As New Point(e.Location.X + buttontomove.Left, _
                                 e.Location.Y + buttontomove.Top)
 
            With Me.ClientRectangle
                If loc.X > 20 And loc.X < .Width - buttontomove.Width _
                And loc.Y > 20 And loc.Y < .Height - buttontomove.Height Then
 
                    'Ausrichtung auf Gitter
                    loc.X = (loc.X \ 20) * 20
                    loc.Y = (loc.Y \ 20) * 20
                    buttontomove.Location = loc
                End If
            End With
        End If
    End Sub
 
 
    Private Sub ButtonDyn_MouseUp(sender As Object, _
                          e As MouseEventArgs)
        'Button-Bewegung beenden 
        buttontomove = Nothing
    End Sub
End Class


Beitrag wurde zuletzt am 20.01.14 um 23:07:16 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Button zur Laufzeit erstellen4.232stefanbla8020.01.14 09:44
Re: Button zur Laufzeit erstellen3.587Manfred X20.01.14 14:11
Re: Button zur Laufzeit erstellen3.511stefanbla8020.01.14 20:37
Re: Button zur Laufzeit erstellen3.579Manfred X20.01.14 22:55
Re: Button zur Laufzeit erstellen3.454stefanbla8021.01.14 10:27
Buttons zur Laufzeit erstellen, verschieben und die Properti...3.626Manfred X21.01.14 13:31
Re: Button zur Laufzeit erstellen3.421stefanbla8022.01.14 13:22

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel