我正在更新在VB 4中完成的代码,我有一个RichTextBox。我需要能够将图像从Windows资源管理器拖放到RTB中。不幸的是,我无法让拖放工作。
我已经创建了一个更简单的Windows窗体程序来尝试解决此问题,但没有取得任何进展。我首先将AllowDrop设置为True。
Public Sub New()
InitializeComponent()
Me.DragAndDropTextBox.AllowDrop = True
End Sub
然后我为RTB创建处理程序。这些内容直接来自MSDN。
Private Sub DragAndDropTextBox_DragEnter(ByVal sender As Object, ByVal e As _
System.Windows.Forms.DragEventArgs) Handles DragAndDropTextBox.DragEnter
' Check the format of the data being dropped.
If (e.Data.GetDataPresent(DataFormats.FileDrop)) Then
' Display the copy cursor.
e.Effect = DragDropEffects.Copy
Else
' Display the no-drop cursor.
e.Effect = DragDropEffects.None
End If
End Sub
Private Sub DragAndDropTextBox_DragDrop(ByVal sender As Object, ByVal e As _
System.Windows.Forms.DragEventArgs) Handles DragAndDropTextBox.DragDrop
System.Windows.Forms.DragEventArgs) Handles DragAndDropTextBox.DragDrop
Dim img As Image
img = Image.FromFile(e.Data.GetData(DataFormats.FileDrop, False))
Clipboard.SetImage(img)
Me.DragAndDropTextBox.SelectionStart = 0
Me.DragAndDropTextBox.Paste()
End Sub
当我在资源管理器中抓取图像并将其拖到我的窗口上时,我得到一个斜线的圆圈。我已经在每个处理程序的第一行放置了断点,并且它们永远不会到达。我看过几个页面,它们似乎都给出了相同的过程,所以我必须错过一些简单的东西。
我现在不担心将图像粘贴到文本框中;我知道我需要努力。我只是想捕获图像,但处理程序方法似乎没有被调用。
更新
经过相当多的实验,我发现实际问题出在我的Visual Studio 2010上,我总是以管理员身份运行。当我从exe运行程序时,拖放工作。当我尝试在调试中从VS运行时,它没有。有没有人经历过这个?
如果有人能对此有所了解,我将非常感激。
答案 0 :(得分:0)
尝试删除Sub New函数中的InitializeComponent()调用。当我这样做时,我能够检测到DragEnter事件。这是我测试的代码(我创建了一个简单的WinForm并在其上放置一个名为DragAndDropTextBox的RichTextBox):
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
DragAndDropTextBox.AllowDrop = True
End Sub
Private Sub DragAndDropTextBox_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DragAndDropTextBox.DragEnter
Debug.Print("Entering text box region")
' Check the format of the data being dropped.
If (e.Data.GetDataPresent(DataFormats.FileDrop)) Then
' Display the copy cursor.
e.Effect = DragDropEffects.Copy
Else
' Display the no-drop cursor.
e.Effect = DragDropEffects.None
End If
End Sub
Private Sub DragAndDropTextBox_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DragAndDropTextBox.DragDrop
Dim img As Image
img = Image.FromFile(e.Data.GetData(DataFormats.FileDrop, False))
Clipboard.SetImage(img)
Me.DragAndDropTextBox.SelectionStart = 0
Me.DragAndDropTextBox.Paste()
End Sub
End Class
当您将自己的自定义控件添加到表单时,InitializeComponent()调用应出现在您的代码中(我相信)。否则,我认为你不需要打电话。
答案 1 :(得分:0)
事实证明,当从exe中运行代码时,Drag-And-Drop正在运行,而不是从Visual Studio中运行。更多搜索结果显示this回答,其中指出当以管理员身份运行时,拖放功能在Visual Studio中不起作用。我以正常权限运行它,代码工作。