是否有任何有效的方式在表单中显示大量标签?

时间:2013-10-29 07:44:48

标签: c# .net winforms

我有一个GUI程序,它根据用户在运行时提供的搜索查询创建包含文件名称的标签并显示它们。根据用户输入,显示的标签数量可能会有很大差异 no可以在0到2000之间变化(大约)。当标签的数量超过1000左右时,包含标签的表格所花费的时间需要很长时间才能显示。
显示表单所花费的时间完全超过了制作好算法所节省的时间(在某些情况下)!我正在寻找一种有效的方法,以便我可以在更短的时间内轻松显示表格。目前,显示包含1499个标签的表单需要1分45秒 目前,我这样做: -

    foreach(string Elements in FileList)
    {
      Label LabelA = new Label() ; 
      // other code here to modify the appearence of label
      LabelA.Show() ;
    }
     MyForm.Show();
    // File List is the List of file names which are to be displayed.
    //MyForm is the name of the form in which labels are added at runtime.

3 个答案:

答案 0 :(得分:0)

可能至少有几种技术:

  • 技术上不可能让所有人都看到当代,所以解决方案只是将它们分配到Tabs。因此,将它们分成应用程序逻辑组。

  • 延迟滚动。因此,当用户滚动窗口时,只更改其中的数据(以及相应的数据字段)

只是提出一个想法,但基本上是为了引起注意一个简单的事实,你肯定确实需要在UI上同时进行所有控制。如果这些解决方案不正确,请更改控制权,以便表示数据。

答案 1 :(得分:0)

  1. Asyn get result 也许您可以使用BackGroundWorker异步查询结果并创建标签。这种方式将为您提供良好的用户体验。

  2. 暂停然后恢复添加标签后,您应使用Control.SuspendLayout()Control.ResumeLayout()

  3. 分页结果您可以通过其他方式寻找结果。

答案 2 :(得分:0)

如果你想在程序启动时使用标签创建标签,并添加一个列表以便即时访问它们

// create a list on there
List<Label> lblList = new List<Label>;
public Form1()
    {
        InitializeComponent();
        for(int i = 0 ; i<1500;i++)
        {
          Label LabelA = new Label() ; 
          // other code here to modify the appearence of label
          LabelA.Show() ;
          lblList.Add(LabelA);
        }
    }

如果你在backGroundWorker上执行此操作,你的程序将快速打开,你可以创建一个prograss栏来创建标签。这将创建标签并添加一个列表。您可以使用索引访问它们并更改其文本:

int index=0;
foreach(Label o in lblList)
{
    o.Text="Text";
    index++;//you can use this index if you want to know which label you editing
}

如果你在启动时创建标签,这将花费一些时间,但是当你使用它们时,创建它们的速度会更快,并且值会立即显示。

抱歉英文不好。