所以,我有兩個選擇:ComboBox.Item.AddRange(string [])VS. ComboBox.DataSource =字符串[]
aComboBox.Item.AddRange(stringArray);
aComboBox.SelectedItem = stringFromStringArray;
和
aComboBox.DataSource = stringArray;
aComboBox.SelectedItem = stringFromStringArray;
現在,第一個是waaaaay慢,當涉及到初始化(約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
與Items
)。 ComboBox
似乎查看Items
來檢查該字符串是否存在於列表中,這就是爲什麼它使用DataSource
方法失敗。
獎勵問題:爲什麼所有的ComboBoxes
作爲一個工作(嘗試更改值)?
無法複製第二種情況。請測試一個獨立的項目併發布簡單的複製代碼。 –
只需搜索項目,直到您獲得指定的項目設置選定的索引 – Cjen1
我使用10,100,1000,10000和100000項目進行了測試。它正常工作。它首先設置'DataSource',然後它設置選定的項目。可能你的'stringFromStringArray'在數組中不存在。 –