使用lb#U addstring添加到c#列表框中的项目不会影响items.count
C#WinForms应用程序的表单上有一个列表框。ListBox窗口句柄被传递到一个旧的Win32 DLL,该DLL使用SendMessage(hWnd、LB_ADDSTRING…)将项目添加到列表框中。这些字符串在运行时出现在listbox中,但是listbox.Items.Count为0,不能使用listbox.Items[x].ToString()访问单个项目使用lb#U addstring添加到c#列表框中的项目不会影响items.count,c#,listbox,C#,Listbox,C#WinForms应用程序的表单上有一个列表框。ListBox窗口句柄被传递到一个旧的Win32 DLL,该DLL使用SendMessage(hWnd、LB_ADDSTRING…)将项目添加到列表框中。这些字符串在运行时出现在listbox中,但是listbox.Items.Count为0,不能使用listbox.Items[x].ToString()访问单个项目 你需要在C#app中做什么才能让它意识到那些字符串在它的列表中,因此应该反映在条目中。计数,以及使用条目[x]访问?创建列表框的子
你需要在C#app中做什么才能让它意识到那些字符串在它的列表中,因此应该反映在条目中。计数,以及使用条目[x]访问?创建
列表框的子类
,重写WndProc
,监听LB#U ADDSTRING
消息(值=0x180),阻止正常处理这些消息,而是将它们包含的数据添加到项
集合中。尚未测试此代码,但它应该足够接近您需要的:
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
public class LegacyListBox : ListBox
{
private const int LB_ADDSTRING = 0x180;
public LegacyListBox() { }
protected override void WndProc(ref Message m)
{
if (m.Msg == LB_ADDSTRING)
{
Items.Add(Marshal.PtrToStringUni(m.LParam));
// prevent base class from handling this message
return;
}
base.WndProc(ref m);
}
}
为什么要这样添加项目。您可能知道正确的方法是调用listbox.Items.Add(string);