【问题标题】:Using large number of UserControl in WindowsForms在 Windows 窗体中使用大量用户控件
【发布时间】:2017-07-14 14:56:03
【问题描述】:

我习惯于使用 HTML 应用程序,在这些应用程序中创建组件列表(如电话簿联系人)没有问题。

Example of my app

现在我已经在 Windows 窗体中使用了这种方法。一个面板填充了大量自定义用户控件 (UC)。只有 30 个 UserControls 需要超过 5 秒才能呈现。而数据库中的数据列表在

这个 UC 只有标签、PictureBox 和 Click 事件。它是这样称呼的。此数据用于填充子控件。

new UserControl(MyModel data);

有没有更好的方法来做到这一点?我想要用户友好的 GUI,而不是使用网格布局。它对用户不友好,并且在向用户显示数据方面非常有限。

foreach (var data in myDbResult)
{
    var uc = new MyUserControl(data);
    uc.Dock = DockStyle.Top;
    resultFlowPanel.Controls.Add(uc);
}

...

public MyUserControl(MyModel data)
{
    this.data = data;
    InitializeComponent();
    label1.Text = data.name;
    label2.Text = data.address;
    // get some more data from database
    using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["AlarmDbCon"].ConnectionString))
    {
        payer = db.Query<Models.g_UserPayer>("SELECT TOP(1) * FROM g_UserPayer WHERE ID_User=@UserID", new
        {
            UserID = guard.ID_User
        }).FirstOrDefault();
    }
    label3.Text = payer.email;
    PictureBox.Image = payer.image;
}

【问题讨论】:

  • 显示代码,您可以在其中填充 UI。为什么网格布局对用户不友好且受限? C# 不是 HTML,Grid 不是 Table
  • 这取决于我,我先从Control 继承并自己绘制控件。它将比创建用户控件轻得多。
  • 据我所知,网格布局只能在表格视图中显示数据?不可能创建这样的东西link

标签: c# html winforms


【解决方案1】:

如果有您自己的 UI 控件,那么您应该考虑在您的 Load 方法中使用 this.SuspendLayout();this.ResumeLayout(); 方法来推迟 UI 控件的昂贵的 UI 布局计算。

您可以使用的另一个方面是在后台线程上加载昂贵的数据。为此,您应该使用委托来更新在 UI 线程上创建的控件。更多信息请访问SO answer

【讨论】:

  • 我使用标准的 UI 控件,如标签、按钮... 暂停/恢复布局没有帮助。我有一个 tabControl,当我用充满 uc 的大面板切换到选项卡时,它也会呈现很长时间。
  • 我看到了,但正在将它们包装/分组到自定义用户控件中,对吧?
  • 在这种情况下,请尝试我上面的方法,如果您在第一段中使用这两种方法没有看到任何显着改善,那么您应该使用后台线程与这两种方法一起填充数据方法。
  • 好的,使用后台线程使 gui 响应更快。谢谢!我认为在功能上我可能会使用 HTML 来构建这样的应用程序,这样使用起来更简单、更好:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多