标准ComboBox控件是没有鼠标事件的,如何在Style=2(只能从下拉列表中选择)模式下,
为其增加鼠标事件?(主要是想为其增加右键菜单功能。)一种办法,借助子类技术,拦截鼠标事件,但这样的代价就是,使调试变得异常困难,
因VB并不是专为子类设计的,自己拦截底层窗体消息,将失去VB最大优势——调试。另一种方法,把该控件禁用,由窗体的(或做成个控件)鼠标事件来触发(根据当前位置来判断)
但这样将失去ComboBox的交互功能,不太理想,而且那个样子还有一种方法,使用定时器+API,随时检测当前鼠标位置及按键信息,若处于该控件内,则触发事件。
但缺点是系统占用问题。希望大家讨论一下,是否还有其它的、较为折中的办法?既能解决系统占用问题(应该由系统消息触发,而不是用无谓的循环去查询)
又能不牺牲VB的调试优势,(若把VB的调试做成VFP6那样,算拉,还是去用C吧)
兼容性强(不能只依靠某个单独的第三方控件,若哪天他想起来要收费,那)
还有,能在VB5下用(主要为了编“绿色”软件)

解决方案 »

  1.   

    自己做一个Active控件可以综合各种功能
      

  2.   

    呵呵,幽默,当然是自己做啦:)
    现在问题就是怎么做?找思路!难道做OCX就能自动的为ComboBox增加鼠标事件?(不用子类)
    这是一个基本控件,如果OCX能做到,那VB源码凭什么做不到?不过,我更希望做成“绿色”软件(有点怀念Dos^-^),与版本密切相关的OCX控件总是一个危险,如果是动态链接库则安全的多(可惜VB诶)
      

  3.   

    做OCX当然可以,不过如果你不想SUBCLASSING的话,也就没必要还在AX里面再用上这个COMBO了。我的意思是,完全自己做:自己绘制控件,自己处理控件的属性事件方法,等等等等。
      

  4.   

    请大虾解释一下:如果你把做成的用户控件放在你的工程一起作为工程里的一个部件(不是工程组里面的一个子工程),而不是把AX编译出来那这个控件的代码到底写在哪里?是不是先编一个该控件的工程,用编译后的OCX加到现在的工程?俺用的是VB5,请帮忙说一下控件的思路。谢谢!:)不会仅为了给ComboBox加个MouseDown事件,就要自己画个文本框,再画个下拉箭头,加上个ListBox吧?(俺觉得最难的还是那个箭头,用图片吧,就不能自动套用XP效果,用文本吧,那个特殊字体又不能保证每台机子上都有诶)俺这懒人的一个天真想法,还是直接在ComboBox上动手脚方便点,当然不是单独用它喽,具体嘛,请教中
      

  5.   

    控件的代码可以包括ctl,可以包括cls,可以包括bas,也可以包括frm,甚至还可以包括pag,把它们当作你的工程里的一个文件添加进去就可以了。