C# 界面初始化时listview需要加载大量数据,求教提高速度的方法!!!
首先,一个列表里面有7万格项目是不合理的,因为你将没有办法通过拖动滚动条来准确定位,毕竟7万条记录的list滚动条得多小啊
其次,如果非要显示的话,建议使用异步填充,先组织好一批数据,然后填充这一批,期间UI线程还是可以相应的,这样虽然速度没有提升,但是用户体验会好一些
再次,如果要求必须一次填充完成的话,在开始填充时使用SuspendLayout(),挂起更新画面项目,然后在填充完以后ResumeLayout(true)恢复更新画面,并将前面挂起的画面更新恢复。
这样可以一定程度上节省更新的时间。
iewSample.SuspendLayout();
this.LoadListData();
iewSample.ResumeLayout(true);
Ps: IsPostback是BS系统上面的,在你的Winform上没有意义。
金山词霸采用的是我说的第二种方案配合第三种方案,只加载一小部分,在你拖动滚动条的时候填充当前滚动条指定的那一段。
相当于分页。
上下滚动条vScrollBar怎么使用呀?我把滚动条放在PictureBox 里面,怎么让它们里面的内容发生滚动呢?
单就VScrollBar控件的使用来说,楼主可以参考下面的代码,但这可能并不能解决你的问题因为这还需要做很多其它的工作。
不过我还是愿意帮你解决问题而写了如下的一段代码,这是一个控件,可以放到窗体上运行后查看滚动条的效果,但或许有人能给楼主一更为完美的解决方案:
C# code
public partial class UserControl1 : UserControl { [StructLayout(LayoutKind.Sequential)] internal struct RECT { public int left; public ; public int right; public int bottom; public RECT(int left, , int right, int bottom) { this.left = left; =; this.right = right; this.bottom = bottom; } } [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] private static extern bool ScrollWindow(IntPtr hWnd, int nXAmount, int nYAmount, ref RECT rectScrollRegion, ref RECT rectClip); private System.Windows.Forms.VScrollBar vScrollBar1; private int m_Top; public UserControl1() { this.InitializeComponent(); this.SetStyle(ControlStyles.ResizeRedraw, true); m_Top = 0; this.vScrollBar1.Scroll += new ScrollEventHandler(vScrollBar1_Scroll); } private void InitializeComponent() { this.vScrollBar1 = new System.Windows.Forms.VScrollBar(); this.SuspendLayout(); // // vScrollBar1 // this.vScrollBar1.Location = new System.Drawing.Point(275, 57); this.vScrollBar1.Name = "vScrollBar1"; this.vScrollBar1.Size = new System.Drawing.Size(17, 80); this.vScrollBar1.TabIndex = 0; // // UserControl1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.vScrollBar1); this.Name = "UserControl1"; this.Size = new System.Drawing.Size(304, 174); this.ResumeLayout(false); } private void setScrollBar() { this.vScrollBar1.Top = 0; this.vScrollBar1.Left = this.Width - this.vScrollBar1.Width; this.vScrollBar1.Height = this.Height; this.vScrollBar1.Maximum = 1000 - this.Height; this.vScrollBar1.LargeChange = this.Height; this.vScrollBar1.Maximum += this.vScrollBar1.LargeChange + 1; this.m_Top = this.vScrollBar1.Value; } private RECT getBodyRect() { int left = 0; = 0; int width = this.Width-this.vScrollBar1.Width; int height = this.Height; RECT rect = new RECT(left,, left + width,+height); return rect; } void vScrollBar1_Scroll(object sender, ScrollEventArgs e) { RECT vSRect = this.getBodyRect(); ScrollWindow(this.Handle, 0, -(e.NewValue - m_Top), ref vSRect, ref vSRect); m_Top = e.NewValue; } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); Rectangle rect = new Rectangle(0, -m_Top, this.Width - this.vScrollBar1.Width, 1000); e.Graphics.DrawEllipse(SystemPens.ControlDark, rect); } protected override void OnLayout(LayoutEventArgs e) { if (e.AffectedControl == this) { this.setScrollBar(); } base.OnLayout(e); } }
百度把缩进都给屏蔽了。
你将就看吧,或者复制到ide里格式化一下吧c# 子窗口怎样添加控件?
DataGridView dg = new DataGridView();
this.Controls.Add(dg);
在窗体中的位置用dg.Left=100和dg.Top=100;来调整c#怎么关闭messagebox
using?System;
using?System.Drawing;
using?System.Collections;
using?System.ComponentModel;
using?System.Windows.Forms;
using?System.Data;
using?System.Runtime.InteropServices;
namespace?MyTest
...{
????/**////?<summary>
????///?Form1?的摘要说明。
????///?</summary>
????public?class?Form1?:?System.Windows.Forms.Form
????...{
????????private?System.Windows.Forms.Button?button1;
????????/**////?<summary>
????????///?必需的设计器变量。
????????///?</summary>
????????private?ponents?=?null;
????????public?Form1()
????????...{
????????????//
????????????//?Windows?窗体设计器支持所必需的
????????????//
????????????InitializeComponent();
????????????//
????????????//?TODO:?在?InitializeComponent?调用后添加任何构造函数代码
????????????//
????????}
????????/**////?<summary>
????????///?清理所有正在使用的资源。
????????///?</summary>
????????protected?override?void?Dispose(?bool?disposing?)
????????...{
????????????if(?disposing?)
????????????...{
????????????????if?ponents?!=?null)?
????????????????...{
???????????????????ponents.Dispose();
????????????????}
????????????}
????????????base.Dispose(?disposing?);
????????}
????????Windows?窗体设计器生成的代码#region?Windows?窗体设计器生成的代码
????????/**////?<summary>
????????///?设计器支持所需的方法?-?不要使用代码编辑器修改
????????///?此方法的内容。
????????///?</summary>
????????private?void?InitializeComponent()
????????...{
????????????this.button1?=?new?System.Windows.Forms.Button();
????????????this.SuspendLayout();
????????????//?
????????????//?button1
????????????//?
????????????this.button1.Location?=?new?System.Drawing.Point(176,?48);
????????????this.button1.Name?=?"button1";
????????????this.button1.Size?=?new?System.Drawing.Size(96,?24);
????????????this.button1.TabIndex?=?0;
????????????this.button1.Text?=?"button1";
????????????this.button1.Click?+=?new?System.EventHandler(this.button1_Click);
????????????//?
????????????//?Form1
????????????//?
????????????this.AutoScaleBaseSize?=?new?System.Drawing.Size(6,?14);
????????????this.ClientSize?=?new?System.Drawing.Size(292,?266);
????????????this.Controls.Add(this.button1);
????????????this.Name?=?"Form1";
????????????this.Text?=?"Form1";
????????????this.ResumeLayout(false);
????????}
????????#endregion
????????/**////?<summary>
????????///?应用程序的主入口点。
????????///?</summary>
????????[STAThread]
????????static?void?Main()?
????????...{
????????????Application.Run(new?Form1());
????????}
????????private?void?button1_Click(object?sender,?System.EventArgs?e)
????????...{
????????????StartKiller();
????????????MessageBox.Show("这里是MessageBox弹出的内容","MessageBox");
????????????MessageBox.Show("这里是跟随运行的窗口","窗口");
????????}
????????private?void?StartKiller()
????????...{
????????????Timer?timer?=?new?Timer();
????????????timer.Interval?=?10000;????//10秒启动
????????????timer.Tick?+=?new?EventHandler(Timer_Tick);
????????????timer.Start();
????????}
????????private?void?Timer_Tick(object?sender,?EventArgs?e)
????????...{
????????????KillMessageBox();
????????????//停止计时器
????????????((Timer)sender)();
????????}
????????private?void?KillMessageBox()
????????...{
????????????//查找MessageBox的弹出窗口,注意对应标题
????????????IntPtr?ptr?=?FindWindow(null,"MessageBox");
????????????if(ptr?!=?IntPtr.Zero)
????????????...{
????????????????//查找到窗口则关闭
????????????????PostMessage(ptr,WM_CLOSE,IntPtr.Zero,IntPtr.Zero);
????????????}
????????}
????????[DllImport("user32.dll",?EntryPoint?=?"FindWindow",?CharSet=CharSet.Auto)]
????????private?extern?static?IntPtr?FindWindow(string?lpClassName,?string?lpWindowName);
????????[DllImport("user32.dll",?CharSet=CharSet.Auto)]
????????public?static?extern?int?PostMessage(IntPtr?hWnd,?int?msg,?IntPtr?wParam,?IntPtr?lParam);
????????public?const?int?WM_CLOSE?=?0x10;
????}
趣米云怎么样?趣米云是创建于2021年的国人IDC商家,虽然刚刚成立,但站长早期为3家IDC提供技术服务,已从业2年之久,目前主要从事出售香港vps、香港独立服务器、香港站群服务器等,目前在售VPS线路有三网CN2、CN2 GIA,该公司旗下产品均采用KVM虚拟化架构。由于内存资源大部分已售,而IP大量闲置,因此我们本月新增1c1g优惠套餐。点击进入:趣米云官方网站地址香港三网CN2云服务器机型活...
无忧云怎么样?无忧云,无忧云是一家成立于2017年的老牌商家旗下的服务器销售品牌,现由深圳市云上无忧网络科技有限公司运营,是正规持证IDC/ISP/IRCS商家,主要销售国内、中国香港、国外服务器产品,线路有腾讯云国外线路、自营香港CN2线路等,都是中国大陆直连线路,非常适合免备案建站业务需求和各种负载较高的项目,同时国内服务器也有多个BGP以及高防节点。一、无忧云官网点击此处进入无忧云官方网站二...
萤光云怎么样?萤光云是一家国人云厂商,总部位于福建福州。其成立于2002年,主打高防云服务器产品,主要提供福州、北京、上海BGP和香港CN2节点。萤光云的高防云服务器自带50G防御,适合高防建站、游戏高防等业务。目前萤光云推出北京云服务器优惠活动,机房为北京BGP机房,购买北京云服务器可享受6.5折优惠+51元代金券(折扣和代金券可叠加使用)。活动期间还支持申请免费试用,需提交工单开通免费试用体验...
suspendlayout为你推荐
水晶易表如何获取和安装水晶易表Xcelsius2008企业资源管理系统企业管理系统有哪些?vga接口定义vga线有几种vga接口定义主板上的VGA接口有什么用?搜索引擎的概念什么叫搜索引擎?搜索引擎的类型有哪些?搜索引擎的概念搜索引擎营销的概念是什么?seo优化技术什么是SEO优化,seo优化有什么用?鄂n鄂A鄂B鄂C鄂D鄂E鄂F鄂G鄂H鄂J鄂K鄂L鄂M鄂N鄂P鄂Q鄂R鄂S鄂T鄂U分别代表湖北省的哪些城市审计平台什么是审计工具单元测试规范求解,单片机程序的单元测试应该怎么做呢?
美国免费主机 域名信息查询 softlayer godaddy续费优惠码 正版win8.1升级win10 中国特价网 web服务器架设 宁波服务器 七夕快乐英文 速度云 鲁诺 支持外链的相册 带宽租赁 免费asp空间 英雄联盟台服官网 独立主机 服务器论坛 中国联通宽带测试 ssl加速 cdn加速技术 更多