Avatar billede devmann Nybegynder
06. juli 2003 - 19:21 Der er 8 kommentarer og
1 løsning

Hvordan laver man drag/drop objecter mellem 2 forms

Jeg vil gerne lave lavet så man kan dragge/droppe objecter, så som knapper/textboxes, men så de kan flyttes fra en form til en anden.
Til dette har jeg lavet et lille projekt, hvor jeg har en mainForm og en dragForm. Når jeg så klikker på min mainForm, så viser jeg dragFormen, men kan ikke få min dragForm til at overtage det e object, som min mainForm generere.

Kan noget hjælpe mig med problemet, eller komme med andre løsnings forslag ?

På forhånd tak .. devmann

Her følger koden på mine 2 forms.

MainForm:

Public Class mainForm
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "
    Public Sub New()
        MyBase.New()
        InitializeComponent()
    End Sub
    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
    Private components As System.ComponentModel.IContainer
    Private Sub InitializeComponent()
        components = New System.ComponentModel.Container
        Me.Text = "Form1"
    End Sub
#End Region

    Private dragForm As New dragForm

    Private Sub mainForm_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
        dragForm.Show()
        dragForm.DesktopLocation = New Point(Convert.ToInt32(MousePosition.X - (dragForm.Width / 2)), Convert.ToInt32(MousePosition.Y - (dragForm.Height / 2)))
    End Sub
End Class

DragForm:

Public Class dragForm
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "
    Public Sub New()
        MyBase.New()
        InitializeComponent()
    End Sub
    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
    Private components As System.ComponentModel.IContainer
    Private Sub InitializeComponent()
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.BackColor = System.Drawing.SystemColors.ActiveCaption
        Me.ClientSize = New System.Drawing.Size(216, 40)
        Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
        Me.Name = "dragForm"
        Me.Text = "dragForm"
        Me.TopMost = True
    End Sub

#End Region

    Private Sub dragFrom_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
        DesktopLocation = New Point(Convert.ToInt32(MousePosition.X - (Width / 2)), Convert.ToInt32(MousePosition.Y - (Height / 2)))
    End Sub

    Private Sub dragFrom_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
        Me.Hide()
    End Sub

End Class
Avatar billede devmann Nybegynder
07. juli 2003 - 18:34 #1
Løste selv problemet
Avatar billede dingemann Novice
01. august 2003 - 23:13 #2
jeg har lige et spørgsmål hvis jeg må stille det...
Avatar billede devmann Nybegynder
02. august 2003 - 09:56 #3
Okay .. fyr løs !
Avatar billede dingemann Novice
02. august 2003 - 10:21 #4
er det muligt at lave en tekstbox med samme funktion som baren i en form... i mit tilfælde har jeg disabled formens FormBorderStyle (None) og vil gerne ha at fx en picturebox eller noget kan flytte hele formen - altså når man trykker på pictureboxe og holder musen nede så er det muligt at flytte hele formen... - lidt drag n' drop relateret...
Avatar billede devmann Nybegynder
02. august 2003 - 22:12 #5
Nu er jeg lidt usikker på helt hvad du mener. Hvis du vil flytte hele formen, når musen holdes nede så ... lav et nyt projekt og sæt koden ind.

Som så ofte før er tricket, at man starter en timer og får et pænt resultat!
God fornøjelse, eller så skriver du bare igen!
............................................

Private WithEvents tmrTimer As Timer = New Timer

Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
        If e.Button = MouseButtons.Left Then
            tmrTimer.Enabled = True
        End If
End Sub

Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
        tmrTimer.Enabled = False
End Sub

Private Sub tmrTimer_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles tmrTimer.Tick
        If tmrTimer.Enabled Then
            DesktopLocation = New Point(Convert.ToInt32(MousePosition.X - (Width / 2)), Convert.ToInt32(MousePosition.Y - (Height / 2)))
        End If
End Sub
Avatar billede dingemann Novice
03. august 2003 - 00:38 #6
taaark - det var lige hvad jeg skulle bruge :D
vil du ha point ?
Avatar billede devmann Nybegynder
03. august 2003 - 06:58 #7
nej, det går jeg ikke så højt op i .. :-)
Avatar billede dingemann Novice
03. august 2003 - 11:04 #8
lige en ting - formen bliver centreret efter musens placering - er det muligt at lave det sådan at musen har den placering på formen når man trykker på den som når man flytter formen?
Avatar billede devmann Nybegynder
03. august 2003 - 20:57 #9
Prøv dette ..

    Private WithEvents tmrTimer As Timer = New Timer
    Private MousePoint As Point

    Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
        MousePoint = New Point(e.X, e.Y)
    End Sub

    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
        If e.Button = MouseButtons.Left Then
            tmrTimer.Enabled = True
        End If
    End Sub

    Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
        tmrTimer.Enabled = False
    End Sub

    Private Sub tmrTimer_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles tmrTimer.Tick
        If tmrTimer.Enabled Then
            DesktopLocation = New Point(MousePosition.X - MousePoint.X, MousePosition.Y - MousePoint.Y)
        End If
    End Sub
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester