2

我正在尝试将文件从 Windows 资源管理器拖放到我的表单中,我几乎成功了 :)
在 shell 中打开资源管理器窗口后,我可以将文件拖放到我的表单中,在我接受之前我有一个消息框/对话框。

问题实际上是我的带有问题的消息框在资源管理器窗口的后面打开。这是一个代码:

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Me.AllowDrop = True
End Sub

Private Sub Form1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragDrop
    If e.Data.GetDataPresent(DataFormats.FileDrop) Then
        Dim Files() As String
        Files = e.Data.GetData(DataFormats.FileDrop)
        If Files.Length > 0 Then
            Dim ret As Integer = MsgBox("Would you like to upload file?" & vbNewLine & Files(0), MsgBoxStyle.OkCancel + MsgBoxStyle.Question, "Decide please")
            If ret = DialogResult.OK Then
                myModule.UploadF()
            End If
        End If
    End If
End Sub

Private Sub Form1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragEnter
    If e.Data.GetDataPresent(DataFormats.FileDrop) Then
        e.Effect = DragDropEffects.All
    Else
        e.Effect = DragDropEffects.None
    End If
End Sub

Private Sub btn_open_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_open.Click
    Shell("explorer c:\", AppWinStyle.NormalFocus)
End Sub

End Class

1)这里有什么方法可以让消息框在资源管理器窗口前弹出?
2) 使用后如何从我的程序中关闭打开的资源管理器窗口?

编辑:...
1) 的解决方案是将Me.Activate 放在MsgBox 之前!
2)为此,我仍然没有找到解决方案。

4

2 回答 2

2

我知道你已经接受了一个答案,但我同意 Hans 的观点,即这个实现是有缺陷的。如果用户必须单击上传按钮,则启动 openfiledialog。打开一个他们必须从中拖动的普通浏览器窗口是非常违反直觉的。

您可以保留拖放功能,但让用户打开他们自己的资源管理器窗口来使用它。

更直观的实现是将拖放功能添加到面板,并具有标签和按钮,以便用户可以选择任一方法。

像这样的东西:

在此处输入图像描述

于 2012-12-11T10:32:41.860 回答
1

试试这个:

在您的项目中添加一个对话框。(可在表单、类等可添加内容列表中找到)。为其添加标签并更改构造函数中的文本。在 Dialogs 绘制事件中添加:

Me.BringToFront()

然后使用这个对话框而不是 MsgBox,它应该提供你需要的东西。

这是一种解决方法,但应该可以。

编辑:

对,找到了更好的解决方案。

在调用 MsgBox 之前将此添加到此问题中编写的代码中:

Me.BringToFront()
Me.TopMost = True

你会没事的。

于 2012-12-11T06:47:16.470 回答