ComboBox绑定数据源后设置SelectedIndex抛出异常求助
ComboBox设置SelectedIndex抛出异常问题解决
问题代码
public static readonly List<string> EdgeDetail = new List<string>() { "", "BC - Beaded Cove", "BD - Beaded", "CF - Chamfer", "CT - Coastal", "CV - Cove", "DR - Double Radius", "SQ - Square", "SB - Step Bevel", "TBD - To Be Determined", "None - No Edge Detail"}; ComboBox extraText = new ComboBox(); BindingSource bs = new BindingSource(); bs.DataSource = EdgeDetail; extraText.DataSource = bs; extraText.SelectedIndex = 3; // 此处抛出异常
问题描述
我把ComboBox的数据源通过BindingSource绑定到字符串列表(不使用BindingSource结果一致),尝试根据保存的内容设置选中索引。示例里设置SelectedIndex=3时抛出异常:
InvalidArgument=Value of '3' is not valid for 'SelectedIndex'.
Parameter name: SelectedIndex
我试过SelectedText、SelectedValue,最后用硬编码设置SelectedIndex为3测试(对应内容是"CF - Chamfer")。监视窗口显示此时ComboBox数据源有11条完整数据,求解决办法。
解决思路
延迟到绑定完成后设置索引
控件绑定数据源后,UI线程可能还没完成数据加载,尤其是非UI线程初始化控件时。可以在DataBindingComplete事件里设置:extraText.DataBindingComplete += (s, e) => { if (extraText.Items.Count > 3) extraText.SelectedIndex = 3; };直接通过文本匹配设置选中项
不用依赖索引,直接找目标文本设置,更稳定:string targetText = "CF - Chamfer"; if (extraText.Items.Contains(targetText)) extraText.SelectedItem = targetText;检查DropDownStyle属性
如果DropDownStyle是DropDownList,要确保索引对应的项存在;如果是DropDown或Simple,可能存在输入框文本和列表项不匹配的问题,但你的场景数据源完整,优先看绑定时机。验证实际加载的项数
虽然监视窗口显示有11条,还是可以在设置索引前手动确认:Debug.WriteLine($"当前项数:{extraText.Items.Count}"); if (extraText.Items.Count > 3) extraText.SelectedIndex = 3;
内容的提问来源于stack exchange,提问作者mrputter7
相关产品推荐
相关产品推荐

