Tabel laten verplaatsen door gebruiker

  • Onderwerp starter Onderwerp starter Spy1
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Spy1

Gebruiker
Lid geworden
2 jul 2007
Berichten
227
Label laten verplaatsen door gebruiker

Ik wil graag een functie in mijn programma dat de gebruiker een tabel kan verplaatsen met de muis, ik heb zelf geen flauw idee hoe dit moet.

Zou iemand iemand me willen helpen?
 
Laatst bewerkt:
De tabel bestaat uit tekst, en hij moet worden verplaats warneer de gebruiker er de heletijd op drukt met de muis. Dan kan hij de tabel overal naar toe verplaatsen.
 
Hoe bedoel je dat die uit text bestaat?!

Is het echt text in een textbox ofzo?
 
Dus maw. wil je die label (met alles erin) verplaatsen als je erop klikt en dan met je muis beweegt?
 
Wel, dan moet je bij de click event op je label checken of de muis ingedrukt blijft, en dan de location property gewoon veranderen afhanjkelijk van de locatie van je muis.

Hier heb je de code van een class voor het verplaatsen van een form, veel complexer dan hier nodig wss, maar je kan er wel de relevante code uithalen als je wil

Code:
    ' Code that extends the form with dragging abilities
#Region " Partial Class - Dragging "
    Partial Public Class DynForm

#Region "Declarations"
        Delegate Sub MouseLocationChangedHandler(ByVal sender As Object, ByVal e As System.EventArgs)
        Delegate Sub DragTypesChangedHandler(ByVal sender As Object, ByVal e As System.EventArgs)

        ''' <summary>Occurs when the mouse location is changed during a drag when the drag functionallity is enabled</summary>
        Public Event MouseLocationChanged As MouseLocationChangedHandler
        ''' <summary>Occurs when a change to the collection of drag types is made</summary>
        Public Event DragTypesChanged As DragTypesChangedHandler

        Private m_allowedTypes As New List(Of Type)
        Private m_mouseLoc As New Point
        Private m_enableDrag As Boolean
#End Region

#Region "Private"
        Private Sub addDefaultDragTypes()
            Me.DragTypes.AddRange(New Type() {Me.GetType, GetType(Label), GetType(ListBox), GetType(Button), GetType(PictureBox), GetType(ProgressBar), GetType(TextBox), GetType(RichTextBox), GetType(MenuStrip), GetType(StatusStrip), GetType(ComboBox), GetType(RadioButton), GetType(CheckBox)})
        End Sub

        Private Sub MyBase_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles MyBase.Load
            makeFormDragable(Me)
        End Sub

        Private Sub makeFormDragable(ByVal form As Form)
            addDragHandlers(form)
            For Each ctrl As Control In form.Controls
                addDragHandlers(ctrl)
            Next
        End Sub

        Private Sub addDragHandlers(ByVal ctrl As Control)
            With ctrl
                For Each aType As Type In Me.DragTypes
                    If aType Is ctrl.GetType Then
                        AddHandler .MouseDown, AddressOf Ctrl_MouseDown
                        AddHandler .MouseMove, AddressOf Ctrl_MouseMove
                        Exit For
                    End If
                Next
            End With
        End Sub

        Private Sub Ctrl_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
            If Me.Drag Then Me.MouseLocation = New Point(MousePosition.X - Me.Location.X, MousePosition.Y - Me.Location.Y)
        End Sub

        Private Sub Ctrl_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
            If e.Button = MouseButtons.Left And Me.Drag Then
                Me.Location = New Point(MousePosition.X - MouseLocation.X, MousePosition.Y - MouseLocation.Y)
            End If
        End Sub

#End Region

#Region "Properties"
        ''' <summary>Gets or sets the current mouse drag location</summary>
        <Browsable(True), Category("Drag"), Description("Gets or sets the current mouse drag location")> _
        Public Property MouseLocation() As Point
            Get
                Return m_mouseLoc
            End Get
            Set(ByVal value As Point)
                If value <> m_mouseLoc Then m_mouseLoc = value : RaiseEvent MouseLocationChanged(Me, New System.EventArgs())
            End Set
        End Property

        ''' <summary>Gets or sets the drag types collection. The user will be able to drag the form when dragging an object of a type contained by this collection</summary>
        <Browsable(True), Category("Drag"), Description("Gets or sets the drag types collection. The user will be able to drag the form when dragging an object of a type contained by this collection")> _
        Public Property DragTypes() As List(Of Type)
            Get
                Return m_allowedTypes
            End Get
            Set(ByVal value As List(Of Type))
                If value IsNot m_allowedTypes Then m_allowedTypes = value : RaiseEvent DragTypesChanged(Me, New System.EventArgs)
            End Set
        End Property

        ''' <summary>Gets or sets wheter advanced drag should be enabled</summary>
        <Browsable(True), Category("Drag"), Description("Gets or sets wheter advanced drag should be enabled")> _
        Public Property Drag() As Boolean
            Get
                Return m_enableDrag
            End Get
            Set(ByVal value As Boolean)
                m_enableDrag = value
            End Set
        End Property
#End Region

    End Class
#End Region
 
Hoe kan ik laten kijken waar de muis zich bervind op het form?
 
Bedankt, de laatste vraag tot ik het kan uitwerken :

Hoe laat ik kijken of hij op de label ingedrukt word?
 
dan moeten zowel de x als y waarde van de cursor binnen een bepaalde grens zitten

x waarde:
beneden grens: me.location.x + jeLabel.location.x
boven grens: me.location.x + jeLabel.location.x + jeLabel.size.x

y waarde:
idem, maar dan met y ipv x xD
 
Label1.Location = Me.MousePosition

bij dat krijg ik deze warning :

Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.
 
Label1.Location = MousePosition
(zonder Me.)
geeft dat ook die warning?

maakt eigenlijk niet zoveel uit, het is niet verkeerd maar kan gewoon niet gecontroleerd worde ...
 
Oké! Het is gelukt! Bedankt! :)

Maar nog een vraagje :o

Hoe laat ik mijn programma kijken of er ergens op het form is geklikt?
 
Klik op je form bij je designer, en bekijk je events eens ;)
 
Bedankt:)!

Aller laatste vraagje (denk ik!). Hoe laat ik kijken of de timer is gestart?

Ik heb deze code:

If Timer1.Start = True Then

Bij de dik gedrukte woorden krijg ik deze error:

Expression does not produce a value.
 
timer.Start() is een method, geen property. maw, dat dient om hem mee te starten

als je wil nagaan of hij gestart is heb je de property .Enabled nodig :)
 
beetje overdreven lange code vind je ook niet?


Code:
Public Class Form1

    Dim StartX, StartY As Integer
    Dim Dragging As Boolean

    Private Sub Label1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Label1.MouseDown
        Dragging = True
        StartX = e.X
        StartY = e.Y
    End Sub

    Private Sub Label1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Label1.MouseMove
        If Dragging = True Then
            Label1.Left = (Label1.Left + e.X) - StartX
            Label1.Top = (Label1.Top + e.Y) - StartY
        End If
    End Sub

    Private Sub Label1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Label1.MouseUp
        Dragging = False
    End Sub

End Class

is meer dan genoeg hoor!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan