gpt4 book ai didi

c# - ComboBox 填充 DataSource 很慢

转载 作者:行者123 更新时间:2023-12-05 07:50:38 24 4
gpt4 key购买 nike

public class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new MainWindow());
}
}

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 < 1548; i++)
{
list[i] = rand.Next().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;

panel.Controls.Add(box, 0, i+1);
}
}
}

此处将创建一个带有按钮的窗口,并将预先生成一个包含 1548 个随机整数的列表。

当您按下按钮时,将创建 36 个组合框并使用预先生成的列表进行填充。它会挂起一两秒钟。

box.Items.AddRange(list); 改变它,它会更慢。

如果您现在注释行 box.DataSource = list;,速度会明显加快。

我不明白为什么将数据源绑定(bind)到 comboBox 需要这么长时间。我猜这与绘制下拉菜单有关。

反正我程序中用的comboBox都是一样的。它们显示相同的列表,但绑定(bind)到不同的“数据槽”(它们使您能够选择库存项目 - 每个槽的项目列表相同,但所选内容不同)。

有什么方法可以强制程序只绘制一个 ComboBox 并将其用于所有 36 个? Od 做类似的事情。让它做同样的事情 36 次似乎是一种资源浪费......

这会加快程序的启动时间。

最佳答案

I don't understand why does it take so long to bind a data source to a comboBox. I'm guessing it has something to do with drawing the drop down menu.

我不知道你是如何实现你的解决方案的,但这是不正常的。我首先建议您:

使用要显示的组合框数量创建一个循环

for(x = 0; x < 36; x++)
{

}

初始化你的组合框并绑定(bind)她,最后存储到一个数据结构中

//intialize combobox
ComboBox cmb = new ComboBox();

//populate with a Datasource

List<ComboBox> lstCmb = new List<ComboBox>();

for(x = 0; x < 36; x++)
{
// store controller into an data strucuture
lstCmb.Add(cmb);
}

所有组合框都预先填充并加载到该数据结构中,您只需使用这 36 个组合框之一。

关于c# - ComboBox 填充 DataSource 很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35977497/

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