C# winform 实现动态图文列表

如图片

img


想请教,如何在C# winform中实现这种列表,最多显示9名学生信息,有新的信息添加进来,则去掉最后一条记录,实时更新。
我现在是使用 webBrowser 来实现的,
当有信息过来的时候使用:webBrowser1.BeginInvoke(方法),来更新窗体
方法中:每次都把HTML样式和HTML代码更新后,赋值给一个StringBuilder,然后this.webBrowser1.DocumentText=StringBuilder;
webBrowser,太容易卡了,当信息量更新快的时候,窗体反应很慢,还很容易卡死,有什么替代的方法或者其他组件吗?

感谢大家,提供的思路,已经搞出来了

img

在想办法处理 用户控件的宽度自适应了。

这个问题很好解决,Winform里有个控件是FlowLayoutPanel,可以自动排列里面的控件,然后你把卡片做成自定义控件UserControl,在构造函数里把数据传进去,然后每次用的时候就new一个新的UserControl,添加到FlowLayoutPanel,这个问题我帮一个妹子解决过,你有哪里不懂的可以私信问我

自定义控件+数据绑定
或 gdi+ 直接绘制

既然是winform 建议试一下TableLayoutPanel表格布局控件+(学生信息)可以自定义学生信息的控件(使用自定义控件或者dev的FlyouPanel)扩展一下思路想一下

webBrowser1.BeginInvoke是创建了新的线程,平凡调用会出现卡顿,建议替换成以下代码来进行控件内HTML页面的刷新

webBrowser1.Document.ExecCommand("Refresh",false,null);

直接用panel来实现,然后空白信息或者隐藏,有信息就填充信息+显示出来,没有就清空信息+隐藏panel。这样不会卡,也不会闪屏

显示可以用panel实现,程序容易卡不是因为信息更新快,是你的线程开的有问题。主界面卡顿或者卡死是你的程序主线程一直占用,导致的。用个委托+自更新也可以。

写了一个简单的示例,不知道是不是你想要的效果,运行如图:

img

自适应宽度的 其实可以参考css media screen类似的处理办法,当软件窗体初始化和窗体大小变化时动根据当前的容器宽度范围给卡片分配指定的宽度,多分几个区间范围就可以了