注意看看控件的屬性,這個是可以靠修改屬性來更改的,里面有接收拖曳進來的數據和拖曳出去的數據的屬性,改成ture就可以拖曳了csdn中有拖曳的實例,就是以treeview控件為例子的,去找找,我上次見過,好像在控件那部分
海寧網站建設公司創新互聯,海寧網站設計制作,有大型網站制作公司豐富經驗。已為海寧成百上千家提供企業網站建設服務。企業網站搭建\成都外貿網站制作要多少錢,請找那個售后服務好的海寧做網站的公司定做!
在控件的MouseDown事件中,記錄控件的當前位置和鼠標坐標,并設置一個標志變量表示進入拖動狀態;在MouseMove事件中,判斷如果當前是拖動狀態,則根據鼠標的當前坐標和MouseDown時的坐標計算出移動量,更改控件位置;在MouseUp事件中清除標志變量。
很久沒有上這里了,今天看到了這個問題,嘗試做了一個;
本例以源文本框TextBox1全部文字作為拖放文字為例,實現拖放
1、向一個窗體中添加兩個文本框,分別名為TextBox1,TextBox2。注意:把TextBox2控件的AllowDrop屬性設置成True,這點不要遺漏。
2、完整的代碼如下:
Public Class Form1
Private MouseIsDown As Boolean = False
Private Sub TextBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseDown
'設置一個標志以顯示鼠標已按下。
MouseIsDown = True
End Sub
Private Sub TextBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseMove
If MouseIsDown Then
'開始拖動(將TextBox1的文本內容作為拖放內容)。
TextBox1.DoDragDrop(TextBox1.Text, DragDropEffects.Copy)
End If
MouseIsDown = False
End Sub
Private Sub TextBox2_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox2.DragEnter
'檢查正在被拖放的數據的格式。
If (e.Data.GetDataPresent(DataFormats.Text)) Then
'顯示復制光標(表示是拖放行為)。
e.Effect = DragDropEffects.Copy
Else
'顯示不放置光標(表示不是拖放行為)。
e.Effect = DragDropEffects.None
End If
End Sub
Private Sub TextBox2_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox2.DragDrop
'粘貼文本(將拖放內容作為TextBox2的文本內容)。
TextBox2.Text = e.Data.GetData(DataFormats.Text)
End Sub
End Class
打一個AjaxControlToolkit補丁包
里面有很多控件
就有你想要的拖拽控件
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
TextBox1.AllowDrop = True
End Sub
Private Sub TextBoxDragEnter(sender As Object, e As DragEventArgs) Handles TextBox1.DragEnter
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
Dim files As String()
Try
files = CType(e.Data.GetData(DataFormats.FileDrop), String())
Me.TextBox1.Text = files(files.Length - 1)
Catch ex As Exception
MessageBox.Show(ex.Message)
Return
End Try
End If
End Sub
TextBox1.AllowDrop = True 是開啟拖放支持,可以在窗體設計器里面開啟它,也可以代碼開啟。
追問: 額,沒有學過C# 回答: 一樣的 Imports System.Drawing Imports System.Collections Imports System.ComponentModel Imports System.Windows.Forms Imports System.Data Namespace WindowsApplication2 Public Class Form1 Inherits System.Windows.Forms.Form Private listBox1 As System.Windows.Forms.ListBox Private indexofsource As Integer '拖動的起始索引 Private indexoftarget As Integer '拖動的結束索引 Private components As System.ComponentModel.Container = Nothing Public Sub New() InitializeComponent() End Sub Protected Overrides Sub Dispose(disposing As Boolean) If disposing Then If components IsNot Nothing Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub Private Sub InitializeComponent() Me.listBox1 = New System.Windows.Forms.ListBox() Me.SuspendLayout() ' ' listBox1 ' Me.listBox1.AllowDrop = True '這個屬性一定要設置為true; Me.listBox1.ItemHeight = 12 Me.listBox1.Items.AddRange(New Object() {"1", "2", "3", "4", "5", "6", _ "7", "8", "9", "0"}) Me.listBox1.Location = New System.Drawing.Point(16, 8) Me.listBox1.Name = "listBox1" Me.listBox1.ScrollAlwaysVisible = True Me.listBox1.Size = New System.Drawing.Size(264, 136) Me.listBox1.TabIndex = 0 AddHandler Me.listBox1.MouseDown, New System.Windows.Forms.MouseEventHandler(AddressOf Me.listBox1_MouseDown) AddHandler Me.listBox1.DragOver, New System.Windows.Forms.DragEventHandler(AddressOf Me.listBox1_DragOver) AddHandler Me.listBox1.DragDrop, New System.Windows.Forms.DragEventHandler(AddressOf Me.listBox1_DragDrop) Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14) Me.ClientSize = New System.Drawing.Size(292, 273) Me.Controls.Add(Me.listBox1) Me.Name = "Form1" Me.Text = "Form1" Me.ResumeLayout(False) End Sub STAThread _ Private Shared Sub Main() Application.Run(New Form1()) End Sub Private Sub listBox1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) indexofsource = DirectCast(sender, ListBox).IndexFromPoint(e.X, e.Y) If indexofsource ListBox.NoMatches Then DirectCast(sender, ListBox).DoDragDrop(DirectCast(sender, ListBox).Items(indexofsource).ToString(), DragDropEffects.All) End If End Sub Private Sub listBox1_DragOver(sender As Object, e As System.Windows.Forms.DragEventArgs) '拖動源和放置的目的地一定是一個ListBox If e.Data.GetDataPresent(GetType(System.String)) AndAlso DirectCast(sender, ListBox).Equals(listBox1) Then e.Effect = DragDropEffects.Move Else e.Effect = DragDropEffects.None End If End Sub Private Sub listBox1_DragDrop(sender As Object, e As System.Windows.Forms.DragEventArgs) Dim listbox__1 As ListBox = DirectCast(sender, ListBox) indexoftarget = listbox__1.IndexFromPoint(listbox__1.PointToClient(New Point(e.X, e.Y))) If indexoftarget ListBox.NoMatches Then Dim temp As String = listbox__1.Items(indexoftarget).ToString() listbox__1.Items(indexoftarget) = listbox__1.Items(indexofsource) listbox__1.Items(indexofsource) = temp listbox__1.SelectedIndex = indexoftarget End If End Sub End Class End Namespace