You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP代码隐藏中如何正确获取ComboBox控件的项列表

C++/WinRT 获取ComboBox项列表时GetMany返回0的解决方案

问题复现

执行代码前已向ComboBox追加3个项,测试代码如下:

vector <IInspectable> items;
int count = DuringCuttingGasTypeComboBox().Items().GetMany(ZERO, items);
int size = DuringCuttingGasTypeComboBox().Items().Size();

运行结果:count返回0,items为空向量,但Size()返回值为3,和ComboBox实际项数一致,代码可正常编译无报错。

根因分析

问题出在传入GetMany的目标向量初始容量为0。
C++/WinRT中所有WinRT集合的GetMany方法遵循统一规则:不会自动为调用方传入的目标集合扩容,最多只会写入目标集合当前可容纳的元素数量。声明的空vector<IInspectable>初始可写入元素数为0,因此GetMany不会写入任何元素,直接返回0。Size()方法读取的是源集合本身的长度,和传入的目标缓冲区无关,因此能返回正确的项数3。

修复代码

调用GetMany前先为目标向量分配和集合总长度一致的容量即可:

// 先读取集合总长度
int itemCount = DuringCuttingGasTypeComboBox().Items().Size();
// 预分配对应大小的向量空间
vector<IInspectable> items(itemCount);
// 批量读取所有项
int actualCount = DuringCuttingGasTypeComboBox().Items().GetMany(ZERO, items);

执行后actualCount会返回3,items向量内会按顺序存储ComboBox的所有项。

如果不需要一次性批量获取所有项做缓存,直接遍历Items属性即可,无需额外拷贝:

for (auto const& item : DuringCuttingGasTypeComboBox().Items())
{
    // 编写单条item的处理逻辑
}

内容的提问来源于stack exchange,提问作者kerplatz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 18:27:42