我过去常常使用HTML应用程序,其中没有创建组件列表的问题(如电话簿联系人)。
现在我在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;
}
答案 0 :(得分:0)
如果您有自己的UI控件,那么您应该考虑在Load
方法中使用this.SuspendLayout();
和this.ResumeLayout();
方法来推迟UI控件的昂贵的UI布局计算。
您可以使用的另一个方面是在后台线程上加载昂贵的数据。为了能够这样做,您应该使用委托来更新在UI线程上创建的控件。有关此SO answer的更多信息。