Private Sub Form_Load()
    Me.OLEDropMode = 1
End SubPrivate Sub Form_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim sCom As String
    
    sCom = Command
    txtFile.Text = sCom & vbCrLf
    Dim nCount As Integer, nIndex As Integer
    Dim sName As String
    With Data
        nCount = .Files.Count
        For nIndex = 1 To nCount
            txtFile.Text = txtFile.Text & .Files.Item(nIndex) & vbCrLf
        Next
    End With
End Sub
如上方式获得文件名以后在Open 那个文件,将内容输出到文本框
不过我记得好像还有一种更简单的方法

解决方案 »

  1.   

    Private Sub Form_Load()
        Me.OLEDropMode = 1
    End SubPrivate Sub Form_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
        Dim sCom As String
        
        sCom = Command
        txtFile.Text = sCom & vbCrLf
        Dim nCount As Integer, nIndex As Integer
        Dim sName As String
        With Data
            nCount = .Files.Count
            For nIndex = 1 To nCount
                txtFile.Text = txtFile.Text & .Files.Item(nIndex) & vbCrLf
            Next
        End With
    End Sub
    如上方式获得文件名以后在Open 那个文件,将内容输出到文本框
    不过我记得好像还有一种更简单的方法
      

  2.   

    Private Sub Form_Load()
    Text1.OLEDropMode = vbOLEDropManual
    End SubPrivate Sub text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
    On Error Resume Next
    If IsWhatIWant(Data) Then
        MsgBox Data.Files(1)
    End If
    End SubPrivate Sub text1_OLEDragOver(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single, State As Integer)
    If IsWhatIWant(Data) Then Effect = vbDropEffectCopy And Effect Else Effect = vbDropEffectNone
    End SubPrivate Function IsWhatIWant(Data As DataObject) As Boolean
    On Error GoTo jmp
    Dim ts As String
    ts = Data.Files(1)
    If Data.GetFormat(vbCFFiles) Then
        If LCase(Right(ts, 4)) = ".txt" Then IsWhatIWant = True
    End If
    jmp:
    End Function
    '---------------
    已经得出文件名,打开文件就自己写吧
      

  3.   

    '模块中声明:
    Public Declare Sub DragAcceptFiles 
    Lib "shell32.dll" (ByVal hwnd As Long, _
    ByVal fAccept As Long)Public Declare Sub DragFinish 
    Lib "shell32.dll" (ByVal hDrop As Long)Public Declare Function DragQueryFile 
    Lib "shell32.dll" Alias "DragQueryFileA" _
    (ByVal hDrop As Long, ByVal UINT As Long, 
    ByVal lpStr As String, ByVal ch As_
     Long) As LongPublic Declare Function SetWindowLong 
    Lib "user32" Alias "SetWindowLongA" _
    (ByVal hwnd As Long, ByVal nIndex As Long,
     ByVal dwNewLong As Long) As LongPublic Declare Function CallWindowProc 
    Lib "user32" Alias "CallWindowProcA" _
    (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, 
    ByVal Msg As Long, ByVal_
     wParam As Long, ByVal lParam As Long) As LongPublic Const WM_DROPFILES = &H233
    Public Const GWL_WNDPROC = (-4)
    Public OldWndProc&Public Sub NewtxtWndFunc(ByVal Hwndl&)
       OldWndProc = SetWindowLong(Hwndl,
     GWL_WNDPROC, AddressOf txtWndProc)’返回
      ’窗口的默认窗口函数的地址,以便恢复
    End SubPublic Sub OldtxtWndFunc(ByVal Hwndl&)'恢复窗口的默认窗口函数
    SetWindowLong Hwndl, GWL_WNDPROC, OldWndProc
    End SubPublic Function txtWndProc&(ByVal NewHwnd&, 
    ByVal uMsg&, ByVal wParam&, ByVal lParam&)
    Select Case uMsg
           Case WM_DROPFILES
    Dim Handle&, FileNameBuff$, Result&,
     hDrop&, FileNum&
                Dim fLine$
                hDrop = wParam
                FileNameBuff = Space(100)
                Result = DragQueryFile(hDrop, (-1), 
    FileNameBuff, 100)'获得拖动的文件的数目
                For i& = 0 To Result - 1
      DragQueryFile hDrop, i, FileNameBuff, 100
      xyOpenFile Trim(FileNameBuff)
                Next
                DragFinish hDrop
                txtWndProc = 1
           Case Else
    txtWndProc = CallWindowProc(OldWndProc,
     NewHwnd, uMsg, wParam, lParam)
    End Select
    End FunctionPublic Function xyOpenFile(ByVal FN$) As Boolean
        If BeUsed(MDIForm1.ActiveForm) Then
            MDIForm1.MunNew_Click
        End If
        Dim FileNum&, fLine$
        FileNum = FreeFile()
        MDIForm1.ActiveForm.Caption = FN
        Open FN For Input As #FileNum
            fLine = StrConv(InputB(LOF(FileNum),
     #FileNum), vbUnicode)
            MDIForm1.ActiveForm.Text1 = fLine
        Close
    End Function
    -----
    '在子窗口Form1中有一个Text1文本框,Form1的Load过程中代码如下:
        Private Sub Form_Load()
             DragAcceptFiles Text1.hwnd, True
             NewtxtWndFunc Text1.hwnd
        End Sub
        '习惯上要在窗口的退出过程中恢复窗口的默认窗口函数:
        Private Sub Form_QueryUnload(Cancel As Integer, 
    UnloadMode As Integer)
                OldtxtWndFunc Text1.hwnd
        End Sub   
      

  4.   

    1.将Text1的属性设定为:
      'Text1.OLEDragMode = 1 (自动)
      'Text1.OLEDropMode = 2 (手动)2.加入以下程序:
    ---------------------------------------------------------------
    Private Sub Text1_OLEDragOver(Data As DataObject, Effect As Long, _
            Button As Integer, Shift As Integer, X As Single, _
            Y As Single, State As Integer)
        '是不是文件?
        If Data.GetFormat(vbCFFiles) Then
            '设定为Copy
            Effect = vbDropEffectCopy And Effect
        Else
            '不要移动
            Effect = vbDropEffectNone
        End If
    End SubPrivate Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, _
            Button As Integer, Shift As Integer, X As Single, _
            Y As Single)
        Dim vFN    As Variant
        Dim st     As String
        Dim FileNo As Long
        
        '是不是文件?
        If Data.GetFormat(vbCFFiles) Then
            Text1.Text = ""        '对每个文件进行读取
            For Each vFN In Data.Files
                '显示文件名
                Text1.Text = Text1.Text & String(Len(vFN), "=") & _
                    vbCrLf & CStr(vFN) & vbCrLf & String(Len(vFN), "=") & vbCrLf
                '打开文件
                FileNo = FreeFile
                Open CStr(vFN) For Input As #FileNo
                    st = StrConv(InputB(LOF(FileNo), #FileNo), vbUnicode)
                Close #FileNo
                '显示文件内容
                Text1.Text = Text1.Text & st & vbCrLf
            Next vFN
        End If
    End Sub