gpt4 book ai didi

c# - 在 TabControl 中预加载选项卡以加快选项卡切换

转载 作者:行者123 更新时间:2023-12-04 05:35:43 24 4
gpt4 key购买 nike

我有一个包含三个选项卡的 TabControl。每个选项卡都包含一个 DataGridView。当我第一次显示 TabControl 时,我将源数据数据绑定(bind)到三个 DataGridView 中的每一个,经过一段时间后,TabControl 出现在屏幕上的默认(第一个)选项卡上。

当我单击其他两个选项卡中的任何一个时(仅限第一次),在显示每个选项卡之前会有很长的延迟。一旦任何选项卡至少显示一次,我就可以非常快速地在选项卡之间自由切换。有什么方法可以预加载或预呈现这些选项卡,这样我就不会在第一次显示时遇到这种延迟?

也许我可以在后台线程中做一些事情来预加载剩余的选项卡。或者也许有人已经为我编写了 TabControl 的扩展。

感谢任何帮助。

编辑:根据 krawl 的要求,这是我正在使用的将数据绑定(bind)到 DataGridView 的代码。

public void LoadNewDataBase(string filename)
{
// Create the database connection
mySQL.CreateNewDataBase(filename);

// Display the DF DataSet
dataGridViewDF.DataSource = GetDataSet("DF").Tables[0].DefaultView;
dataGridViewSA.DataSource = GetDataSet("SA").Tables[0].DefaultView;
dataGridViewGPS.DataSource = GetDataSet("GPS").Tables[0].DefaultView;

dataGridViewDF.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
dataGridViewSA.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
dataGridViewGPS.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

// Preload the tabs
for (int i = tabControl1.TabCount - 1; i >= 0; i--)
{
tabControl1.SelectedIndex = i;
tabControl1.Invalidate();
tabControl1.Update();
}
}

private DataSet GetDataSet(string tableName)
{
DataSet ds = new DataSet();
mySQL.GetDataSet("SELECT * FROM " + tableName).Fill(ds);
return ds;
}

这个操作不是线程化的。作为我的问题的临时解决方案,我将 for 循环包含到我的 LoadNewDataBase 方法中以迭代每个选项卡并显示它。为了混淆用户的此操作,我在我的 TabControl 上覆盖了一个图形以指示该控件正在加载,然后我将其隐藏(不包括相关代码)。它作为一种变通方法很有用,但不是一个优雅的解决方案。

最佳答案

我建议发布一些关于您如何尝试加载选项卡的代码。我使用以下代码进行了测试,没有任何界面延迟。

    protected void Form1_Load(object sender, EventArgs e)
{
dataGridView1.DataSource = GetTable();
dataGridView2.DataSource = GetTable();
dataGridView3.DataSource = GetTable();
}

private DataTable GetTable()
{
DataTable table = new DataTable();
for (int i = 0; i < 6; i++)
{
table.Columns.Add("Col" + i.ToString(), typeof(string));
}

for (int i = 0; i < 1000; i++)
{
table.Rows.Add(GetRandomString(), GetRandomString(), GetRandomString(), GetRandomString(), GetRandomString(), GetRandomString());
}

return table;
}


private Random rand = new Random();
private string validChars = "0123456789abcdefghijklmnopqurstuvwyz";

private string GetRandomString()
{
StringBuilder builder = new StringBuilder();

char[] c = new char[rand.Next(15, 20)];
for (int i = 0; i < c.Length; i++)
{
c[i] = validChars[rand.Next(0, validChars.Length - 1)];
}

return new string(c);
}

关于c# - 在 TabControl 中预加载选项卡以加快选项卡切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11975771/

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