以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  求助,拖放的问题?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=102140)

--  作者:hxjxclbj
--  发布时间:2017/6/13 21:56:00
--  求助,拖放的问题?
参与站内专家的代码,做了一个文件或图片拖放的案例,需要在拖放的窗口进行一些操作,如何获取实施拖放的窗口名?我是通过活动窗口的办法获取,必须保证拖入的窗口为活动的而不是文件所在的窗口,操作时非常麻烦,请高手指点。

全局代码如下:

Public Sub picture_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs)

Dim paths As object() = e.Data.GetData(Windows.Forms.DataFormats.FileDrop)

For Each path As object In paths

    For i As Integer = 0 To 5 \'有可能打开6个聊天窗口

        Dim frm As WinForm.Form = Forms("聊天内容" & i) \'找出实施拖放的窗口

        If frm.Opened Then

            If frm.Name = Forms.ActiveForm.Name Then

                Vars("c_fname") = FileSys.GetName(path)

                If Vars("c_fname").Contains(".bmp") Or Vars("c_fname").Contains(".jpg") Or Vars("c_fname").Contains(".png") Then

                    Vars("c_fname") = Vars("c_fname") & "|2"

                Else

                    Vars("c_fname") = Vars("c_fname") & "|1"

                End If

MessageBox.Show(Vars("c_fname"))

                frm.Controls("bnfswj").PerformClick

            End If

        End If

    Next

Next

sender.Cursor = System.Windows.Forms.Cursors.IBeam

End Sub

 

Public Sub picture_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs)

If (e.Data.GetDataPresent(Windows.Forms.DataFormats.FileDrop)) Then

    e.Effect = Windows.Forms.DragDropEffects.Link

    sender.Cursor = System.Windows.Forms.Cursors.Arrow

Else

    e.Effect = Windows.Forms.DragDropEffects.None

End If

End Sub


--  作者:有点蓝
--  发布时间:2017/6/13 22:30:00
--  
做个例子过来测试一下
--  作者:hxjxclbj
--  发布时间:2017/6/13 23:03:00
--  
已整合到一个大系统中,经过测试可行,就是太不方便,因为不知如何获得实施拖放行为的窗口名。截图如下:
图片点击可在新窗口打开查看此主题相关图片如下:演示文稿2.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:演示文稿1.png
图片点击可在新窗口打开查看


--  作者:hxjxclbj
--  发布时间:2017/6/13 23:09:00
--  
因为需要在左窗口中进行代码操作
--  作者:有点蓝
--  发布时间:2017/6/14 8:59:00
--  
可以通过picture_DragDrop事件sender参数获取窗口标题

msgbox(sender.FindForm().Text)

--  作者:hxjxclbj
--  发布时间:2017/6/14 10:41:00
--  
多谢,已解决。尝试用 sender.FindForm().Name,省去 For...Next 循环直接应用,发现返回的是一个空值。呵呵。
--  作者:有点色
--  发布时间:2017/6/14 11:23:00
--  

这样也行

 

 sender.FindForm().controls(0).name


--  作者:hxjxclbj
--  发布时间:2017/6/14 15:24:00
--  
成了,谢谢色老师,代码简单清楚,不用循环判断了。代码如下:

Public Sub picture_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs)
Dim paths As object() = e.Data.GetData(Windows.Forms.DataFormats.FileDrop)
For Each path As object In paths
    Dim frm As WinForm.Form = Forms(sender.FindForm().controls(0).name)
    If frm.Opened
        Vars("c_fname") = path
        If Vars("c_fname").Contains(".bmp") Or Vars("c_fname").Contains(".jpg") Or Vars("c_fname").Contains(".png") Then
            Vars("c_fname") = Vars("c_fname") & "|2"
        Else
            Vars("c_fname") = Vars("c_fname") & "|1"
        End If
        frm.Controls("bnfswj").PerformClick
    End If
Next
sender.Cursor = System.Windows.Forms.Cursors.IBeam
End Sub