作者:易秀胜_444 | 来源:互联网 | 2023-09-04 18:07
有一个第三方程序(不一定是什么语言开发)的录入界面,上面有一个只读下拉框(就是不能往里面写东西的那种),里面的数据项是:品种1品种2品种3品种4数据的顺序不定,数据的数量也
有一个第三方程序(不一定是什么语言开发)的录入界面,上面有一个只读下拉框(就是不能往里面写东西的那种),
里面的数据项是:
品种1
品种2
品种3
品种4
...
...
数据的顺序不定,数据的数量也不定。比如说品种3,它不一定在下拉框的第几项。
我现在想通过sendmessage或者postmessage发送一个消息给这个下拉框,让它选中“品种3”
SendMessage(combo1.Hwnd, WM_SETTEXT, 0, '品种3');
但这样不好使,PostMessage也试过,也不行。
请教,应该怎样实现我要的效果?
21 个解决方案
SendMessage(ComboBox1.Handle, WM_SETTEXT, 0, Integer(PChar('品种3')));
或
SendMessage(ComboBox1.Handle, CB_SETCURSEL, ComboBox1.Items.IndexOf('品种2'), 0);
SendMessage(yourHandle,CB_SETCURSEL,0,Integer(PChar('123')));
我发现3楼回答的问题:1、要么没看清楚别人的问题就回答;2、要么就是回答别人已经回答过的答案。
TO:4楼的
我只是说一下
blazingfire的第2个方法不成功吧
从blazingfire回答也学了不少东西
我也再学习,呵呵
仁者见仁,智者见智吧
var
Ret: LongInt;
begin
Ret := SendMessage(combo1.Hwnd, CB_FINDSTRINGEXACT, -1, LongInt(PChar('品种2')));
if Ret = -1 then begin
ShowMessage('没有找到品种2!');
Exit;
end;
SendMessage(combo1.Hwnd,CB_SETCURSEL,Ret,0);
end;
发现僵哥就是高手,一出手就解决问题。
另外我找到这样也可以:
SendMessage(combo.Hwnd, CB_SELECTSTRING, 0, Integer(PChar('品种3')));
-------------------------
但发现这两个方法,虽然内容都选中了,但却没有激活下拉框的点击事件或者change事件,
应该如何继续处理呢?
应该可以继续编程,去触发下拉框的点击事件以及onchange事件啊
VB的程序我试了
用CN_COMMAND的话onclick和onchange都不能触发,
用WM_COMMAND倒是触发了onclick事件。但看你代码的意思应该是要触发onchange事件。
怪了。
那又该怎么样触发onchange事件呢?
有的程序的下拉框中,既有onclick事件又有onchange事件。
另外我继续追加100分。