.navigation.next{
text-align: right;
}
这里将创建一个带按钮的窗口,并预先生成一个包含1548个随机整数的列表。
当您按下按钮36时,将创建ComboBoxes并使用预生成列表进行填充。它会挂一两秒钟。
用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);
}
}
}
更改它,它会更慢。
如果您现在对第box.Items.AddRange(list);
行进行评论,则速度会明显加快。
我不明白为什么将数据源绑定到box.DataSource = list;
需要这么长时间。我猜这与绘制下拉菜单有关。
无论如何,我在我的程序中使用的comboBox
都是一样的。它们显示相同的列表,但被绑定到不同的数据槽&#34; (它们使您能够选择库存项目 - 每个插槽的项目列表都相同,但选择的内容不是。)
有什么方法可以以某种方式强制程序只绘制一个ComboBox并将其用于所有36个? Od做类似的事情。似乎浪费资源让它做同样的事情36次......
它会加快程序的启动时间。
答案 0 :(得分:0)
我不明白为什么将数据源绑定到
comboBox
会花这么长时间。我猜想这与绘制下拉菜单有关。
我不知道您是如何实现解决方案的,但这是不正常的。我首先向你暗示的是:
使用您要显示的组合框数量创建循环
for(x = 0; x < 36; x++)
{
}
初始化您的组合框并将其绑定,最后存储到数据结构中
//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个组合框之一即可。