那么,我有两个选项:
aComboBox.Item.AddRange(stringArray);
aComboBox.SelectedItem = stringFromStringArray;
并且
aComboBox.DataSource = stringArray;
aComboBox.SelectedItem = stringFromStringArray;
现在,第一种方法在初始化时速度非常慢(大约5-6倍)。虽然它确实将选定的项目设置正确,但仍然很慢,所以我决定使用第二种方法。
但是,如果我使用第二种方法,在执行第二个命令时,
aComboBox
内的Items数组还没有设置,因此选定的项目是索引1处的项目,而不是指定的项目。问题是,如何在保持第一种方法的功能性的同时获得第二种方法的性能?
编辑:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ComboBoxTest
{
class MainWindow : Form
{
string[] list = new string[1548];
TableLayoutPanel panel = new TableLayoutPanel();
public MainWindow() : base()
{
Height = 2000;
Width = 1000;
Random rand = new Random();
for (int i = 0; i < 1547; i++)
{
list[i] = rand.Next().ToString();
}
list[1547] = 5.ToString();
Button button = new Button();
button.Text = "Press me";
button.Click += Button_Click;
panel.Controls.Add(button, 0, 0);
panel.Height = 2000;
panel.Width = 1000;
Controls.Add(panel);
Show();
}
private void Button_Click(object sender, EventArgs e)
{
for (int i = 0; i < 36; i++)
{
ComboBox box = new ComboBox();
box.DataSource = list; //box.Items.AddRange(list);
box.SelectedItem = 5.ToString();
panel.Controls.Add(box, 0, i+1);
}
}
}
}
我使用这个程序重现了问题。如果你将它更改为addRange()
,那么它将需要更多的时间,但这样会设置项目。
尝试在SelectedItem
上添加断点,然后查看ComboBox
。
如果你设置其中一个,另一个将为空(DataSource
vs. Items
)。 ComboBox
似乎查找Items
来检查列表中是否存在字符串,这就是为什么使用DataSource
方法会失败的原因。
额外问题:为什么所有ComboBoxes
都像一个(尝试更改值)?