0

我有一个 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.
4

3 回答 3

0

可能至少有两种技术:

  • 从技术上讲,人们不可能看到所有这些都是当代的,所以解决方案就是将它们分成Tabs. 因此,将它们分成应用程序逻辑组。

  • 延迟滚动。因此,当用户滚动窗口时,只有其中的数据发生了变化(以及相应的数据字段)

只是给出一个想法,但基本上是为了引起人们注意一个简单的事实,即您确实确实需要一次在 UI 上使用所有控件。如果这些解决方案不正确,请更改控制,以便呈现数据。

于 2013-10-29T07:57:53.433 回答
0
  1. Asyn get result 也许您可以使用BackGroundWorker异步查询结果并创建标签。这种方式会给你一个很好的用户体验。

  2. 暂停然后恢复当你添加你应该使用的标签Control.SuspendLayout()Control.ResumeLayout()

  3. 对结果进行分页 您可以通过其他方式对结果进行分页。

于 2013-10-29T08:08:30.173 回答
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);
        }
    }

如果您在后台工作人员上执行此操作,您的程序将快速打开,您可以制作一个用于创建标签的进度条。这将创建标签并将它们添加到列表中。您可以使用它们的索引访问它们并像这样更改它们的文本:

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
}

如果您在启动时创建标签,这将需要一些时间,但是当您以这种方式使用它们时,创建它们的速度会更快,并且值会立即显示。

抱歉英语不好。

于 2013-10-29T08:09:18.960 回答