在WindowsForms

时间:2017-07-14 06:22:38

标签: c# html winforms

我过去常常使用HTML应用程序,其中没有创建组件列表的问题(如电话簿联系人)。

Example of my app

现在我在Windows窗体中使用了这种方法。一个面板填充了大量自定义UserControls(UC)。只有30个UserControl需要超过5秒才能渲染。来自数据库的数据列表在< 1s。

中返回

此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;
}

1 个答案:

答案 0 :(得分:0)

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

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

相关问题