可以调用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
用SendMessage 发送 CB_ADDSTRING 消息来添加数据
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 删除一这个选项
这个测试通过了 不过你上面给出的msdn,不是明明说这个参数写0么,为什么却应该用1?: (WPARAM) wParam, // = 0; not used, must be zero 还有怎么替换某一项数据 能写写么 就结帐
删除一个列表项 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开始)
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
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
删除一这个选项
知道那里错了
呵呵
SendMessage Combo1.hwnd, CB_ADDSTRING, 1, byval "123456"
这样就可以了类型不对
不过你上面给出的msdn,不是明明说这个参数写0么,为什么却应该用1?:
(WPARAM) wParam, // = 0; not used, must be zero
还有怎么替换某一项数据 能写写么 就结帐
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开始)
删除了第0项
原来的第一项就成为第0项了吧这里有个问题 开始的时候那个第0项是在combox直接显示出来的,而删除后新的第0项不在这个combox显示,而是位于下拉列表中,因而此时combox显示为空白,有办法让这个新的第0项位于combox中自动显示出来吗