06. juli 2003 - 19:21Der 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
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...
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
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?
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
Synes godt om
Ny brugerNybegynder
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.