PDA

View Full Version : دراگ و دراپ



saghez
جمعه 03 آبان 1387, 18:58 عصر
فرض کنید چندین (listbox) در اختیار داریم و آنها را روی صفحه ای نمایش داده ایم. هرکدام شامل چند عضو هستند. سئوال من این است چطور میتوان یک گزینه از یکی از انها میتوان رویش کلیک کرد و کلید موس را نگه داشت و آن را به لیست دیگر کشید(شبیه به هنگامی که میخواهیم فایلی را از یک فولدر به فولدر دیگر منتقل کنیم)

reza6384
شنبه 04 آبان 1387, 10:42 صبح
باید در رویداد MouseDown مربوط به لیست باکس مبدا selected Item اون رو به Clipboard اضافه کنید و در رویداد Mouse Up لیست باکس مقصد Item موجود در clipboard رو به item های لیست باکس مقصد اضافه کنید.

mostafaaa
شنبه 04 آبان 1387, 12:13 عصر
البته با روشی که آقا رضا گفتند هم فکر کنم بشه این کار رو انجام داد ولی منطقی تر اینه که از متد DoDragDrop که برای همین کاره استفاده کنیم. برای مثال :

Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.ListBox2.AllowDrop = True
End Sub
Private Sub ListBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDown
DoDragDrop(Me.ListBox1.SelectedItem, DragDropEffects.Move)
End Sub
Private Sub ListBox2_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox2.DragDrop
Me.ListBox2.Items.Add(e.Data.GetData(DataFormats.T ext))
Me.ListBox1.Items.Remove(e.Data.GetData(DataFormat s.Text))
End Sub
Private Sub ListBox2_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox2.DragEnter
If e.Data.GetDataPresent(DataFormats.Text) Then
e.Effect = DragDropEffects.Move
Else
e.Effect = DragDropEffects.None
End If
End Sub
End Class

saghez
شنبه 04 آبان 1387, 14:09 عصر
از جوابهای خوب و راهنمایی های عالی شما متشکرم

sepehr.net
چهارشنبه 08 آبان 1387, 22:17 عصر
البته اگه میخواهی عمل درگ و دراپ رو ببینی وثل خود ویندوز ، باید از api ها استفاده کنی. اگه خواستی بگو تا کدش رو براتون قرار بدم

saghez
جمعه 10 آبان 1387, 22:08 عصر
دوست عزیز سپهر دات نت

لطفا کد را هم بگذارید تا لطف شما کامل شود

sepehr.net
شنبه 11 آبان 1387, 15:53 عصر
من یه کد دیگه پیدا کردم که از Api ها استفاده نمیکنه ولی جواب کار شما رو میده

System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown
mouse_offset = New Point(-e.X, -e.Y)
End Sub
Private Sub Button1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TitleLBL.MouseMove
If e.Button = Windows.Forms.MouseButtons.Left Then
Dim mousePos As Point = sender.findform().MousePosition
mousePos.Offset(mouse_offset.X, mouse_offset.Y)
sender.findform().Location = mousePos
End If
End Sub
این کد هم به صورت public قرار بده

Public mouse_offset As Point

sepehr.net
شنبه 11 آبان 1387, 15:54 عصر
البته کار این کد جابه جا شدن فرمه
اگه میخوای چیز دیگه ایی رو جابه جا کنی فقط کافیه کلمه ی FindForm رو بر داری

saghez
شنبه 11 آبان 1387, 21:46 عصر
دوست عزیز اگر ممکن است با استفاده از API هم راهنمایی بکنید. در ضمن کد دومی که ارائه داده اید به نظرم ناقص باشد لطفا اصلاح کنید(ممنون از زحمتی که میکشید)

saghez
یک شنبه 12 آبان 1387, 08:23 صبح
ضمن تشکر از دوستانی که زحمت کشیده جواب و راهنمایی داده اند توجه شما را به مقاله زیر نیز جلب میکنمhttp://www.codeproject.com/KB/dotnet/csdragndrop01.aspx