gpt4 book ai didi

c# - ComboBox.Item.AddRange(string[]) VS。 ComboBox.DataSource = 字符串[]

转载 作者:行者123 更新时间:2023-11-30 23:28:24 26 4
gpt4 key购买 nike

所以,我有两个选择:

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。如果您设置一个,另一个将为空(DataSourceItems)。 ComboBox 似乎在查看 Items 以检查字符串是否存在于列表中,这就是它使用 DataSource 方法失败的原因。

奖励问题:为什么所有 ComboBoxes 都作为一个整体工作(尝试更改值)?

最佳答案

The question is, how do I get the performance of the second one with the functionality of the first one?

如果您希望它正常工作,您可以将 box.SelectedItem = 5.ToString(); 行移动到将框添加到面板之后的行。

当您将DataSource 用于您的组合框时,设置SelectedItem 仅当您的组合框存在于您的窗体上时才有效。

我不确定性能,但确定功能。

Bonus question: Why are all ComboBoxes working as one (try changing the value)?

因为它们绑定(bind)到同一个DataSource。事实上,他们使用的是单个 BindingManagerBase

您可以为它们使用不同的 BindingSource。您也可以将它们绑定(bind)到 list.ToList()

关于c# - ComboBox.Item.AddRange(string[]) VS。 ComboBox.DataSource = 字符串[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35999320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com