另一个程序窗体内有一个combo控件
其显示的那项数据为000,下拉还有一项数据为111如何发送555替换000?
还有就是如何插入一项数据如222到111下面(或上面)呢?

解决方案 »

  1.   

    怎么都是跨程序的问题sendmessage不知道有没有这个功能
      

  2.   

    可以调用SendMessage函数来实现这些功能 增加一个列表项 CB_ADDSTRING 
    lResult = SendMessage( // returns LRESULT in lResult 
    (HWND) hWndControl, // handle to destination control 
    (UINT) CB_ADDSTRING, // message ID 
    (WPARAM) wParam, // = 0; not used, must be zero 
    (LPARAM) lParam // = (LPARAM) (LPCTSTR) lParam; 
    ); 
    lParam指向一个以null结束的字符串,将被加入的列表项 删除一个列表项 CB_DELETESTRING 
    lResult = SendMessage( // returns LRESULT in lResult 
    (HWND) hWndControl, // handle to destination control 
    (UINT) CB_DELETESTRING, // message ID 
    (WPARAM) wParam, // = (WPARAM) () wParam; 
    (LPARAM) lParam // = 0; not used, must be zero 
    ); 
    wParam指定将被删除列表项的下标(从0开始) 取得选定的项 CB_GETCURSEL 
    lResult = SendMessage( // returns LRESULT in lResult 
    (HWND) hWndControl, // handle to destination control 
    (UINT) CB_GETCURSEL, // message ID 
    (WPARAM) wParam, // = 0; not used, must be zero 
    (LPARAM) lParam // = 0; not used, must be zero 
    ); 
    返回值了lResult包含了当前被选择的列表项的下标(从0开始)
    参考资料:microsoft msdn
      

  3.   

    用SendMessage 发送 CB_ADDSTRING 消息来添加数据
      

  4.   

    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Const CB_ADDSTRING = &H143
    Const CB_DELETESTRING = &H144
    Private Sub Command1_Click()SendMessage Combo1.hwnd, CB_ADDSTRING, 1, "123456"
    End Sub
    添加一个选项 在1这个位置
    Private Sub Command2_Click()
    SendMessage Combo1.hwnd, CB_DELETESTRING, 1, 0
    End Sub
    删除一这个选项
      

  5.   

    好像没有替换某项的代码吧想问问你 怎么根据MSDN知道里面的参数取值的呢  辛苦了
      

  6.   

    相关api查看工具都有的 foxapi相关系统参数请看http://www.mndsoft.com/blog/article.asp?id=400
      

  7.   

    刚才测试了一下 发送ADDSTRING进去的是乱码"/?"
      

  8.   

    SendMessage Combo1.hwnd, CB_ADDSTRING, 1, "123456"
    知道那里错了
    呵呵
    SendMessage Combo1.hwnd, CB_ADDSTRING, 1, byval "123456"
    这样就可以了类型不对
      

  9.   

    这个测试通过了
    不过你上面给出的msdn,不是明明说这个参数写0么,为什么却应该用1?:
    (WPARAM) wParam, // = 0; not used, must be zero
    还有怎么替换某一项数据 能写写么 就结帐
      

  10.   

    删除一个列表项 CB_DELETESTRING 
    lResult = SendMessage( // returns LRESULT in lResult 
    (HWND) hWndControl, // handle to destination control 
    (UINT) CB_DELETESTRING, // message ID 
    (WPARAM) wParam, // = (WPARAM) () wParam; 
    (LPARAM) lParam // = 0; not used, must be zero 
    ); 
    wParam指定将被删除列表项的下标(从0开始) 
    这个才是那里是为0的(WPARAM) wParam, // = (WPARAM) () wParam; wParam指定将被删除列表项的下标(从0开始) 两个都是0的是取得选定的项 CB_GETCURSEL 
    lResult = SendMessage( // returns LRESULT in lResult 
    (HWND) hWndControl, // handle to destination control 
    (UINT) CB_GETCURSEL, // message ID 
    (WPARAM) wParam, // = 0; not used, must be zero 
    (LPARAM) lParam // = 0; not used, must be zero 
    ); 
    返回值了lResult包含了当前被选择的列表项的下标(从0开始)
      

  11.   

    如果采用删除操作:
    删除了第0项
    原来的第一项就成为第0项了吧这里有个问题 开始的时候那个第0项是在combox直接显示出来的,而删除后新的第0项不在这个combox显示,而是位于下拉列表中,因而此时combox显示为空白,有办法让这个新的第0项位于combox中自动显示出来吗
      

  12.   

    Const CB_SETCURSEL = &H14ESendMessage Combo1.hwnd, CB_SETCURSEL, 0, 00是第一个 1是第二个