将图像拖放到RichTextBox中

时间:2015-05-13 13:43:31

标签: vb.net image visual-studio-2010 drag-and-drop windows-explorer

我正在更新在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运行时,它没有。有没有人经历过这个?

如果有人能对此有所了解,我将非常感激。

2 个答案:

答案 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中不起作用。我以正常权限运行它,代码工作。