文件拖放支持RichTextBox(.Net)

时间:2013-05-28 15:46:38

标签: drag-and-drop outlook richtextbox

我尝试做的是:

  • 启用TextBox的拖放文件(删除的文件应在文本中显示为小图标)。
  • 将文本和删除的文件保存到数据库。
  • 通过双击其图标从TextBox中打开已删除的文件。

删除文件并在文本中显示图标的部分工作正常,但仍然存在一些问题:

  • 如何将删除文件的路径信息保存到TextBox中的图标表示中。 RichTextBox的自动Drag& Drop功能做了一些但是我无法弄清楚如何。 (如您所见(在清单1中)我尝试将带有两个条目(文件的图像和路径)的DataObject粘贴到TextBox,但路径不会保存。)

  • 第二个问题是:如何读取双击文件的信息(文件路径)? (参见清单2,其中一个可能会失败) 我如何解释SeletedRTF以获取我想要的信息?

任何人都可以帮我吗?

清单1:

Private Sub RTB_Kommentar_DragDrop(sender As System.Object, e As System.Windows.Forms.DragEventArgs) Handles RTB_Kommentar.DragDrop
    If e.Data.GetDataPresent("FileDrop", True) = True Then
        Dim paths As String() = CType(e.Data.GetData("FileDrop"), Object)
        If (paths.Count > 0) Then
            Dim icon As Icon = System.Drawing.Icon.ExtractAssociatedIcon(paths(0))
            Dim image = CreateTextBoxImage(paths(0), icon)

            Dim dObj As New DataObject()
            dObj.SetImage(image)
            dObj.SetText(paths(0))
            Clipboard.SetDataObject(dObj)

            RTB_Kommentar.Paste()

            [...]

            e.Effect = DragDropEffects.None
        End If
    End If
End Sub

清单2:

Private Sub RTB_Kommentar_DoubleClick(sender As System.Object, e As System.EventArgs) Handles RTB_Kommentar.DoubleClick
    Dim dataObject As New DataObject()
    dataObject.SetDataObject(RTB_Kommentar.SelectedRtf)
    Dim img = dataObject.GetImage()
    Dim t = dataObject.GetText()
End Sub

1 个答案:

答案 0 :(得分:0)

如果有人有兴趣我解决了这个问题。 通过以下链接的一些帮助:

ExRichTextBox (on CodeProject) - Enhanced RichTextBox with insert functions for images or text OutlookDataObject (on CodeProject) - A object to get files that where dragged from Outlook

经过一些沉重的字节推断后,iam现在能够将文件添加到RichTextBox并在双击中重新打开它们。

您可以找到示例项目here