If Data.GetFormat(vbCFFiles) Then
Effect = vbDropEffectCopy And Effect '这里为什么要加上and effect?有什么作用?
Exit Sub
End If
Effect = vbdropeffnone
End Sub还有,学到现在还是弄不明白如何进行位运算,比如在这里Effect = vbDropEffectCopy And Effect具体起到的判断作用是什么也不明白,求高人指点~

解决方案 »

  1.   

    这里的And应该作为与运算的吧。
      

  2.   

        
        Dim a As Byte
        Dim b As Byte
        a = 3: b = 6
        Debug.Print a And b   '与运算 值应该是2
      

  3.   

    确实没错啊 我还是学生不是程序员 这段代码是我在VB网络视频教程上看到的,整段代码运行后经过多次测试没有出错,这是截下的一小段代码,不知道它具体用途,因为如果删掉“And Effect”运行后测试结果也不出错的
      

  4.   

    1,可能是拖动的效果text1的OLEDropMode要设为1
    multiline设置为truePrivate Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)Dim FF As IntegerFF = FreeFileDim a As String
    Dim b As StringMe.Caption = Data.Files.Item(1)Open Data.Files.Item(1) For Input As #FFDo Until EOF(FF)Line Input #FF, ba = a & b & vbNewLineLoopText1.Text = aCloseEnd Sub2,可能文本拖动后的计算效果?
    确实不明白那段代码,很诡异,难道是...
      

  5.   

    确实挺诡异的这个老师经常在属性赋值的时候用上位运算,说是体现了VB编程的严谨性,但我每次把他位运算的代码删除了一样可以正常运行,比如说这里的And Effect,可能有一定的判断和限制范围的作用,但似乎是多余的。
      

  6.   


    Sub dropfile(ByVal txt As TextBox, ByVal strfn$)
    Dim ifile As Integer
    ifile = FreeFile
    Open strfn For Input Access Read Lock Read Write As #ifile
    Dim str$, strline$
    While Not EOF(ifile) And Len(str) <= 32000
    Line Input #ifile, strline$
    If str <> "" Then str = str & vbCrLf
    str = str & strline
    Wend
    Close #ifile
    txt.SelStart = Len(txt)
    txt.SelText = str
    End Sub
    Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Data.GetFormat(vbCFFiles) Then
    Dim vfn
    For Each vfn In Data.Files
    dropfile Text1, vfn
    Next vfn
    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 Data.GetFormat(vbCFFiles) Then
    Effect = vbDropEffectCopy And Effect
    Exit Sub
    End If
    Effect = vbdropeffnone
    End Sub
    我把完整的源代码都贴上来了 它可以同时选中多个TXT文本文件拖入TXT文本框并显示内容
      

  7.   

    ------------------------------------------------------
    当源部件决定放操作能发生,且源部件被放到目标部件时,此事件发生。注意 仅当 OLEDropMode 被设置为 1 (Manual) 时,此事件才发生。语法Private Sub object_OLEDragDrop(data As DataObject, effect As Long, button As Integer, shift As Integer, x As Single, y As Single)OLEDragDrop 事件语法包含下面部分:部分 描述 
    Object 对象表达式,其值是“应用于”列表中的一个对象。 
    Data DataObject 对象,包含源提供的格式,另外也可能包含这些格式的数据。若 DataObject 不包含数据,则当控件调用 GetData 方法时提供数据。SetData 和 Clear 方法不能用在这里。 
    Effect 源对象设置的长整型数,用来识别执行的动作,这样当部件被移动后允许源采取适当的动作(例如,如果源被从一个部件移到另一个部件,则执行删除数据操作)。可能的取值列于“设置值”中。 
    Button 整数,当按下鼠标键时,与鼠标状态相对应。左键为位 0,右键为位 1,中键为位 2。这些位相应的值分别为 1,2 和 4,它代表了鼠标键的状态。可设置三个位中的部分、全部或根本不设置,相应地表明部分、全部按键被按下或没有按键按下。 
    Shift 整数,当按下 SHIFT、ctrl 和 ALT 键时,与这些键状态相对应。 shift 键为位 0,ctrl 键为位 1,alt 键为位 2。这些位相应的值分别为 1,2 和 4,shift 参数代表了这些键的状态。可设置三个位中的部分、全部或根本不设置,相应地表明部分、全部按键被按下或没有按键按下。例如,同时按下 ctrl 和 ALT 键,shift 值为 6。 
    x,y 确定鼠标指针当前位置的数值。x 和 y 值由对象的 ScaleHeight、ScaleWidth、ScaleLeft 和 ScaleTop 属性设置的坐标系统的格式来表示。 
    VbDropEffectScroll -2147483648一个掩码,指出放下目标窗口已经滚动或应该滚动。 
    设置值effect 设置如下:常数 值 描述 
    VbDropEffectNone 0 放目标不接受数据。 
    VbDropEffectCopy 1 放结果保存于从源到目标的数据拷贝中。初始数据没有被拖放操作改变。 
    VbDropEffectMove 2 放结果保存于要从拖放源移到放源的数据中。移动后,拖放源要删除数据。 
    说明源 ActiveX 部件应总是屏蔽 effect 参数值,以确保同将来实现的 ActiveX 部件兼容。目前,仅使用了 effect 参数 32 位中的 3 位,然而将来的 Visual Basic 版本就可能用到其它位。所以考虑到将来的问题, 拖源和放目标在进行任何比较之前应屏蔽这些值。例如,源部件不能把 effect 同 vbDropEffectCopy 相比,如:If Effect = vbDropEffectCopy... 而是应该屏蔽该值或被搜寻的值,如:If Effect And vbDropEffectCopy = vbDropEffectCopy... -或-If (Effect And vbDropEffectCopy)... 这样,允许在 Visual Basic 新版本中定义新的放效果,并与现存的代码保持向后兼容性。大部分部件支持人工 OLE 拖放事件,也有一些支持自动化 OLE 拖放事件。----------------------------------------------------------为了确保源 ActiveX 部件实 ActiveX 部件兼容,对effect进行位运算
    如果源ActiveX不屏蔽Effect,则Effcet默认为1,屏蔽Effect,则Effect默认为0
    那么一下代码很好理解了If data.GetFormat(vbCFFiles) Then ’如是文件则显示可放下图标
    effect = vbDropEffectCopy And effect   '如果Effect不被屏蔽则结果为1,相当于Effect=vbDropEffectCopy,如果Effct被屏蔽,则结果为0,相当于Effect=vbDropEffectNone
    Else ’否则显示不可放下图标
    effect = vbDropEffectNone  'vbDropEffectNone为0
    End If
      

  8.   

    清楚了很多!但还有些不明白(没学多久对屏蔽不屏蔽什么的不大懂) 这样说如果源ActiveX屏蔽Effect的话,Effect=vbDropEffectNone,那么就不可以拖动并显示文本了,那样程序岂不是不能实现设计效果了吗?