我自己做的usercontrol里其中包含有个模块文件,现在问题是,我想从模块里想访问usercontrol的一个属性,在设计阶段.而且这个调用必须是在模块文件里的.有什么办法吗?

解决方案 »

  1.   

    将usercontrol的那个需要访问的属性在模块中申明为Public类型即可。
      

  2.   

    我的属性是public的.如果是运行阶段是一定可行的,在设计阶段,模块是工程的一部分
    访问的时候什么格式????
      

  3.   

    Usercontrol1.Property
    行不行?
      

  4.   

    在模块里根本就看不到UserControl1
      

  5.   

    那, 
    Dim something As Object
    Set something= New Usercontrol1
    something.property
      

  6.   

    sworddx 这个方法我试试,something.property 的具体用法呢?
      

  7.   

    试过了,不好使,模块是usercontrol的一部分,这种用法感觉比较怪。也不好使。
    另一个就是想在模块里的过程触发usercontrol的一个定义好的事件,该怎样??使用raiseevent 也不行。哪位仁兄想想办法啊。继续加分。。
      

  8.   

    不明白你究竟要干什么
    usercontrol如果是一个工程的一部分,那么模块从属于usercontrol根本是错的,模块是从属于工程的,
      

  9.   

    工程编译结果是做成OCX,没有模块功能不完整,主要是要用到 AddressOf 函数,而取地址的函数过程是一定要放在模块里的,头都大了.
      

  10.   

    你的意思是要在子类化程序里修改usercontrol的属性或触发usercontrol的事件?
      

  11.   

    YES,最后生成OCX,感觉就是usercontrol和模块就是水火不容.
      

  12.   

    详细的能帖就帖了,机器不能上网,写大概的吧------------usercontrol------------------
    Dim Event MessageArrive()........................'有若干的过程和属性
    ----------------------------------------
    ----------模块--------------------------
    Public Sub WinProc(hwnd as Long , uMsg as long ,lParam as long ,wParam as long )'子类化的窗体程序.对uMsg处理.必须在模块中.
    '有窗体消息传入时.RaiseEvent MessageArrive 但是VB提示无效.......End Sub
    大概就是这样吧.
      

  13.   

    用了个笨办法,加了个Timer控件,UserControl主动检测,用到API CreateEvent 和WaitForSingleObject,再就是用循环检测,不过没有用Timer好.不知道有没有更高明的办法,期待着.......................
      

  14.   

    用类似的api。(settimeevent还是什么,记不得了)
      

  15.   

    思想就是..在类里,就是usercontrol模块里-----类命名MsgSwitch
    prevWindowProc=SetWindowLong ......WndProc (位于模块)
    再有个WindowProc(在类里)必须申明为Friend
    Friend Function WindowProc (..........) As Long 
      RaiseEvent .........
    CallWindowProc  prevWindowProc,..........................
    End Function
                                
    模块里的 WndProc函数 是这样
    Public Function WndProc(.............) As Long
    WndProc=GetObject(.......自己写的函数,不是API).WindowProc(.........)
    CallWindowProc  prevWindowProc,..........................
    End Function
    GetObject 申明为 Private Function GetObject(hWnd as Long) As MsgSwitch
    函数关键的代码
    Dim Obj As XWatcher
    Dim pObj As Long
    pObj = GetWindowLong(hWnd, GWL_USERDATA)
    CopyMemory Obj, pObj, 4
    Set GetObject = Obj
    CopyMemory Obj, 0&, 4
    End Function
      

  16.   

    补充一下 pObj = GetWindowLong( hWnd, GWL_USERDTA)是从窗体的数据区取得的数据,前面有个操作是 SetWindowLong (hWnd, GWL_COPYDATA, ObjectPtr(Me)).捎后揭贴,希望有更多的人能看到这个帖子。