精华内容
下载资源
问答
  • 基于winform的分页查询技术,主要用的vs2013跟sql server 2008,效率挺高,需要的朋友可以下载,相互学习。
  • backgrounglayout属性设置为none,否则会影响重绘效率
    backgrounglayout属性设置为none,否则会影响重绘效率。
    展开全文
  • 包含各类行业场景、各类风格、人物、风景、制造、服务、机械等37大类ico图标,可以满足各类软件常规开发需求,提升开发效率和界面展示效果。
  • 优势:在虚拟模式下,数据插入的效率成倍增长。 缺点:因虚拟模式使用了一个缓冲集合,相当于一次读入所有数据,当数据量很大时,例如几万条或者几十万条数据,程序占用内存很大。可以手动释放缓存,等GC回收有点...

    看见论坛中有人问ListView的虚拟模式是否能使用图标,当时我不知道何为虚拟模式,顿时兴趣大增,查阅各种资料后,现把成果分享一下。

    ListView中属性VirtualMode,当把它设置为true时,控件不再使用Collection.Add()这种方式来添加数据,取而代之的是使用RetrieveVirtualItemCacheVirtualItems两个事件,单独使用RetrieveVirtualItem也可以,CacheVirtualItems这个事件主要是为了方便编程人员操作缓冲集合,其参数CacheVirtualItemsEventArgs有StartIndex和EndIndex两个属性

    据说DataGridView这个控件也有虚拟模式,这个我没有做测试。

    虚拟模式是专门为使用海量数据编程而设计的,几千条数据感觉不明显。

    优势:在虚拟模式下,数据插入的效率成倍增长。

    缺点:因虚拟模式使用了一个缓冲集合,相当于一次读入所有数据,当数据量很大时,例如几万条或者几十万条数据,程序占用内存很大。可以手动释放缓存,等GC回收有点慢。

    ==================测试环境==================

    IDE: SharpDevelop 4.4

    .Net Framework 4.5.1

    CPU: AMD 5000+黑盒 oc到2.7GHz

    Mem: DDR2 800

    ===========================================


    程序很简单,界面如下:

        

    代码如下:

    虚拟模式:

    	public partial class ListViewWithVirtualMode : Form
    	{
    		private ListViewItem[] _itemsCacheCollection;
    		private ImageList _imageList;
    		private int _nTotalRows;
    		
    		public ListViewWithVirtualMode()
    		{
    			//
    			// The InitializeComponent() call is required for Windows Forms designer support.
    			//
    			InitializeComponent();
    			
    			//
    			// TODO: Add constructor code after the InitializeComponent() call.
    			//
    		}
    		
    		void ListViewWithVirtualModeLoad(object sender, EventArgs e)
    		{
    			_imageList = new ImageList();
    			_imageList.Images.Add(Image.FromFile("../../Images/right.png"));
    			_imageList.Images.Add(Image.FromFile("../../Images/wrong.png"));
    			
    			_nTotalRows = Convert.ToInt32(textBox_TotalRows.Text);
    			
    			listView1.Width = 170;
    			listView1.View = View.SmallIcon;
    			listView1.SmallImageList = _imageList;
    		}
    		
    		private void Button_GenerateColClick(object sender, EventArgs e)
    		{
    			if (listView1.Items.Count != 0)
    			{
    				_itemsCacheCollection = null;
    				listView1.Clear();
    			}
    
    			_nTotalRows = Convert.ToInt32(textBox_TotalRows.Text);
    			
    			listView1.CacheVirtualItems += listView1_CacheVirtualItems;
    			listView1.RetrieveVirtualItem += listView1_RetrieveVirtualItem;
    
    			/*
    			 * 这里有两种设置虚拟缓冲区的大小
    			 * 1 listView1.VirtualListSize = TextBox.Text;
    			 * 2 listView1.VirtualListSize = TextBox.Text + ?
    			 *   ? = 随便一个数值,比如1000
    			 *   listView1.EnsureVisible(listView1.Items.Count - 1);
    			 * 	 EnsureVisible作用为可视的条数,如果方法2不设置这个函数
    			 *   当拖动ListView到最后时会报索引越界的错误
    			 */
    			listView1.VirtualListSize = _nTotalRows;
    
    			listView1.VirtualMode = true;
    		}
    		
    		private void listView1_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
    		{
    			if (_itemsCacheCollection != null)
    			{
    				e.Item = _itemsCacheCollection[e.ItemIndex];
    			}
    			else
    			{
    				e.Item = new ListViewItem(e.ItemIndex.ToString());
    			}
    		}
    				
    		void listView1_CacheVirtualItems(object sender, CacheVirtualItemsEventArgs e)
    		{
    			if (_itemsCacheCollection != null)
    				return;
    			
    			_itemsCacheCollection = new ListViewItem[_nTotalRows];
    			
    			if (checkBox_Icons.Checked)
    			{
    				for (int i = 0; i < _nTotalRows; i++)
    				{
    					if (i % 2 == 0)
    					{
    						_itemsCacheCollection[i] = new ListViewItem((i + 1).ToString(), 0);
    					}
    					else
    					{
    						_itemsCacheCollection[i] = new ListViewItem((i + 1).ToString(), 1);
    					}
    				}
    			}
    			else
    			{
    				for (int i = 0; i < _nTotalRows; i++)
    				{
    					_itemsCacheCollection[i] = new ListViewItem((i + 1).ToString());
    				}
    			}
    		}
    	}
    
    普通模式:

    	public partial class ListViewWithoutVirtualMode : Form
    	{
    		private ListViewItem[] _itemsCacheCollection;
    		private ImageList _imageListSmall;
    		
    		public ListViewWithoutVirtualMode()
    		{
    			//
    			// The InitializeComponent() call is required for Windows Forms designer support.
    			//
    			InitializeComponent();
    			//
    			// TODO: Add constructor code after the InitializeComponent() call.
    			//
    		}
    		
    		void ListViewWithoutVirtualModeLoad(object sender, EventArgs e)
    		{
    			_imageListSmall = new ImageList();
    			_imageListSmall.Images.Add(Image.FromFile("../../Images/right.png"));
    			_imageListSmall.Images.Add(Image.FromFile("../../Images/wrong.png"));
    			
    			listView1.SmallImageList = _imageListSmall;
    		}
    
    		void Btn_GenerateClick(object sender, EventArgs e)
    		{
    			_itemsCacheCollection = null;
    			listView1.Clear();
    			
    			var rowCount = Convert.ToInt32(textBox_RowTotal.Text);
    			_itemsCacheCollection = new ListViewItem[rowCount];
    
    			if (!checkBox_PictureCol.Checked)
    			{
    				for (int i = 0; i < rowCount; i++)
    				{
    					_itemsCacheCollection[i] = new ListViewItem("item" + (i + 1).ToString());
    				}
    			}
    			else
    			{
    				for (int i = 0; i < rowCount; i++)
    				{
    					if (i % 2 == 0)
    					{
    						_itemsCacheCollection[i] = new ListViewItem("item" + (i + 1).ToString(), 0);
    					}
    					else
    					{
    						_itemsCacheCollection[i] = new ListViewItem("item" + (i + 1).ToString(), 1);
    					}
    				}
    			}
    			listView1.Items.AddRange(_itemsCacheCollection);
    		}
          }

    测试结果:测试程序中开启虚拟模式5万条数据插入没感觉程序有卡顿现象,使用默认的普通模式插入1000条数据有明显卡顿现象。两种模式中均含有16x16的图标。

    展开全文
  • WinForm窗体加载数字动态显示,额外开启进程,效率高。
  • 目前网上的无边框窗体资源存在各种不足,或设计复杂效率低或功能缺少。总结整理所有能看到的,历时2月不断压缩代码, 功能非常完善,实现了最简洁的 拖拽、放大缩小、拉伸,代码没有使用WIN32 api 和gdi+也没有使用任何...
  • Srr-WinForm版本 Srr WinForm Edition源代码 ...程序使用C#编写,您可以使用其他语言编写的DLL以提高其效率或多功能性。 希望Srr WinForm Edition能在国内GPL环境下茁壮成长! 作者-吉米(BitterLotus)2021.2.27
  • WinForm下编写分页控件,实现DataGridView的分页效果

    千次下载 热门讨论 2014-09-27 22:15:12
    WinForm下编写分页控件,实现DataGridView的分页查询效果。附带详细的注释,一看即会。另外也可直接复用。
  • C#-WinForm(2种dataGridView导出Excel)批量导出,高效率,36列万行,15秒
  • C#WinForm,多线程快速刷新界面。没什么高级技术。只希望能解决一下需要多线程与UI快速交互的朋友的问题。
  • /// /// 导出Excel文件 /// /// /// /// 数据集 /// 导出后是否打开文件 /// public static bool DataTableToExcel(string filePath, System.Data.DataTable dataTable
    /// <summary>
            /// 导出Excel文件
            /// </summary>
            /// /// <param name="dataSet"></param>
            /// <param name="dataTable">数据集</param>
            /// <param name="isShowExcle">导出后是否打开文件</param>
            /// <returns></returns>
            public static bool DataTableToExcel(string filePath, System.Data.DataTable dataTable, bool isShowExcle)
            {
                //System.Data.DataTable dataTable = dataSet.Tables[0];
                int rowNumber = dataTable.Rows.Count;
                int columnNumber = dataTable.Columns.Count;
                int colIndex = 0;
    
                if (rowNumber == 0)
                {
                    return false;
                }
    
                Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
                Microsoft.Office.Interop.Excel.Workbook workbook = excel.Workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
                Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];
                excel.Visible = isShowExcle;
                Microsoft.Office.Interop.Excel.Range range;
    
    
                foreach (DataColumn col in dataTable.Columns)
                {
                    colIndex++;
                    excel.Cells[1, colIndex] = col.ColumnName;
                }
    
                object[,] objData = new object[rowNumber, columnNumber];
    
                for (int r = 0; r < rowNumber; r++)
                {
                    for (int c = 0; c < columnNumber; c++)
                    {
                        objData[r, c] =dataTable.Rows[r][c];
                    }
                }
    
                range = worksheet.get_Range(excel.Cells[2, 1], excel.Cells[rowNumber + 1, columnNumber]);
    
                range.Value2 = objData;
    
                range.NumberFormatLocal = "@";
    
                worksheet.SaveAs(filePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
    
               //excel.Quit();
                return true;
            }

      /// <summary>
            /// 读取Excel文件数据到DataTable
            /// </summary>
            /// <param name="filePath">Excel文件路径</param>
            private void Import_Excel(string filePath)
            {
                string sqlconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";
    
                string sql = @"select * from [Sheet1$]";
    
                try
                {
                    using (OleDbConnection conn = new OleDbConnection(sqlconn))
                    {
                        using (OleDbDataAdapter adapter = new OleDbDataAdapter(sql, conn))
                        {
                            System.Data.DataTable dt = new System.Data.DataTable();
                            adapter.Fill(dt);
    
                            this.LoadDataGridView(dt);
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("打开文件出错,错误信息:" + ex.Message.ToString(), "提示");
                }
            }

    展开全文
  • C# WinForm ListView在虚拟模式下,从缓冲之中获取所需的数据进行加载,性能会有很大提高。步骤:(1)必须设置VirtualMode为true并设置VirtualListSize大小;(2)绑定该事件RetrieveVirtualItem(3)如果中间更新了数据...
  • 【IT168技术】很多人问过我这样一个问题:WPF和以前的WinForm有什么区别? 我之前的回答一直是:没什么区别,仅仅是表示层用XAML封了层皮,使得Windows看起来更炫了。 今天(确切的说是昨天),我终于发现了我肤浅。...
    IT168技术】很多人问过我这样一个问题:WPF和以前的WinForm有什么区别?

      我之前的回答一直是:没什么区别,仅仅是表示层用XAML封了层皮,使得Windows看起来更炫了。

      今天(确切的说是昨天),我终于发现了我肤浅。首先我要澄清一下,WPF较之WinForm的先进之处不止一点点。

      对于WPF,很多人都以为这是微软的一个小玩具,充其量就是让Vista和Win7的表示层更炫了,然后就会吸引人们去购买——当然了,我相信多数人购买Wim7的动机并不在乎它的内核做了什么变动...

      言归正传...

       WPF将Windows表示层发展至用声明式语言进行开发,并且融入大量的动画和特效,使得在Win32中极难做到的富客户端应用能在WPF中信手拈 来,同时用矢量图取代位图,引入路由事件(RoutedEvent)对元素树进行多层监听,通过依赖属性(DependencyProperty)动态变 更控件树等,这些都是表面上我们所看到的。不过这些不是我今天想说的重点,何况有不少牛人的研究要比我深入多了,实在是自惭形秽啊,今天我只是承认错误来 的。

      在众多WPF对于WinForm的优势中,令我意识到我之前的错误的一点就是WPF对于多线程编程的优化。

      在 WinForm程序开发时,一旦涉及多线程操作,我们一般不可能没有见过InvalidOperationException这个异常。这个异常的出现多 数情况是由于worker线程(子线程)修改主线程控件(或对象)的属性而导致的非法操作,当然这种做法也非每次都会失败,这主要取决于子线程想要操作的 对象是不是线程安全的。

       无论是Windows窗体还是WPF,问题的成因都很简单:Windows控件使用的是组件对象模型(Component Object Model,COM)单线程单元(Single-threaded Apartment,STA)模型,因为其底层的控件是单元线程(apartment-threaded)的。此外,很多控件都用消息泵(message pump)来完成操作。因此,这种模型就需要所有调用该控件的方法都和创建该控件的方法位于同一个线程上。

      WinForm控件提供了 InvokeRequired属性来判断当前线程是不是创建此控件的线程。一旦控件创建完成,那么InvokeRequired的效率将会不错,且也能保 证安全。不过若是目标控件尚未被创建(此时,虽然C#对象已经存在,不过其底层的窗口句柄仍旧为null),那么InvokeRequired则可能会耗 费比较长的时间。(它会从下至上遍历整个控件树,直到找到一个可以承载此控件且已经实例化并被创建了的父控件,这种做法可以保证子控件将会与父控件在同一 个线程上创建。找到合适的父控件之后,框架即可执行同样的检查,比较当前线程的ID和创建该父控件的线程的ID。)。若是框架无法找到任何一个已创建的父 窗体,那么则需要找到一些其他类型的窗体。若在层次体系中无法找到可用的窗体,那么框架将开始寻找暂存窗体(parking window),暂存窗体让你不会被某些Win32 API奇怪的行为所干扰。简而言之,有些对窗体的修改(例如修改某些样式)需要销毁并重新创建该窗体。暂存窗体就是用来在父窗体被销毁并重新创建的过程中 用来临时保存其中的控件的。在这段时间内,UI线程仅运行于暂存窗体中。

      “通常,WPF 应用程序从两个线程开始:一个用于处理呈现,一个用于管理 UI。呈现线程有效地隐藏在后台运行,而 UI 线程则接收输入、处理事件、绘制屏幕以及运行应用程序代码。”

       “UI 线程对一个名为 Dispatcher 的对象内的工作项进行排队。 Dispatcher 基于优先级选择工作项,并运行每一个工作项,直到完成。每个 UI 线程都必须至少有一个 Dispatcher,并且每个 Dispatcher 都只能在一个线程中执行工作项。”

      ——MSDN

      WPF开始设计的时候,就将多线程的问题考虑了进去,上述很多过程都 得到了简化。这得益于Dispatcher类的使用,每个线程都有一个Dispatcher。在第一次访问某个控件的Dispatcher时,类库将察看 该线程是否已经拥有了Dispatcher。若已经存在,那么直接返回。如果没有的话,那么将创建一个新的Dispatcher对象,并关联在控件及其所 在的线程之上。Dispatcher提供了类似InvokeRequired的方法(CheckAccess)【实际上并不提倡使用此方法,且在目前的 WPF中此方法已经被取消】。这个方法只是比较线程的ID,所以会很快。

      另外,Dispatcher提供了优先队列(总共11个 Priority,主要是用于WPF中UI的层次结构设计,比如动画的优先级就是最高的);异步调用(WinForm中的 Control.BeginInvoke和Control.EndInvoke也提供异步功能);DispatcherTimer (使用 DispatcherTimer 而不是使用 System.Timers.Timer 的原因是 DispatcherTimer 与 Dispatcher 运行于相同的线程,并且可以在 DispatcherTimer 上设置 DispatcherPriority),简化了开发多线程GUI程序

    转载于:https://www.cnblogs.com/wzyexf/archive/2010/10/15/1852363.html

    展开全文
  • 是软件开发人员不可多得的功能性组件,使用报表打印系统可以大大的简化程序用于报表打印的功能的复杂程序,减少出错率,提高程序的开发效率。 万用报表打印系统基于DataSet的数据结构,保证了大多数应用程序对打印...
  • C# Winform圆形进度条(改良版)从csdn下载,增加了圆形进度值文字显示。GDI+绘制,效率高。
  • WPF和WinForm技术有什么区别?哪个更加有前景?

    万次阅读 多人点赞 2019-03-19 22:12:03
    比如显示股票k线价格的控件3、动画winform:写后台代码wpf:用animation的各种属性即可4、句柄winform:一个控件一个句柄(记得是这样,如果我记错了请指正)wpf:整个窗口同一个句柄5、控件自适应winform:麻烦wpf:利用wpf...
  • C# winform 高效绘图

    千次阅读 2017-03-17 17:22:36
    最近工作中需要给一个网络视频会议c++ sdk编写winform客户端 demo,其中的有个功能为电子白板,初步了解下C#绘图相关的基础知识。 由于在绘制连续点组成的曲线时鼠标移动的速度非常快,所以要考虑效率,否则会漏掉很...
  • 【C#】winform多语言方案

    千次阅读 2018-06-04 14:25:11
    考虑到以后的扩展和开发时的效率,我认为选择“手动添加”的这种方式比较好。 (1).对于程序部署到不同国家和地区中所共有的部分,如前端UI部分,前端HardCode部分,部分服务端数据返回。 前端UI:将对应的str...
  • sqlite 运行的条件为.Net Framework 4.0和The Visual C++ 2010 SP1 runtime,否则winform界面出现一闪而过的现象,其原因是连接不了SQLite数据库,The Visual C++ 2010 SP1 runtime下载地址:...
  • 为企业或个人在.NET环境下快速开发系统提供了强大的支持,开发人员不需要开发系统的基础功能和公共模块,框架自身提供了强大的函数库和开发包,开发人员只须集中精力专注于业务部分的开发,因此大大提高开发效率和...
  • C# WinForm UI 设计方法

    2021-06-29 00:48:10
    如运行出现错误,检查fontawesome-webfont.ttf字库文件是否在exe文件夹内,重新编译选择“优化代码”项,效率提高好多。 1、提供全部函数demo。 2、提供尽量详细的操作说明和编辑、修改、添加说明 写的不是很清楚,...
  • C#winform 界面刷新

    千次阅读 2021-04-21 13:39:32
    1. 跨线程界面更新 1.1通过委托更新界面 public delegate void RefreshInterface(int num);//创建委托,含有一个参数num bool MyThreadIsRun = false;//用来控制线程状态 private Thread MyThread = null;...
  • winform导出excel高效,设置格式

    热门讨论 2011-11-02 10:07:01
    效率导出excel,可以设置格式,样式等,导出在自定义查询里面,其他模块都是假的,先查询之后,然后直接导出
  • https://www.cnblogs.com/findumars/p/6339340.html
  • 一、源码特点 非常好的工具集,可以大大提高你的开发效率. 二、功能介绍 本工具集是作者在工作中积累下来的精华,经过整理后开放给大家一起用,希望能帮助大家开发学习。 三、菜单功能 winform 版的开发者常用工具箱...
  • WinForm中常用控件

    2020-08-21 17:47:02
    WinForm是Net开发平台下的一个开发框架,可用于前台交互界面的开发,可以快速搭建起一套完整的可执行、可交互的前台界面,而这些都得益于其提供的一套丰富的控件,大大提高开发效率。 目录 窗体 公共控件 一、Button...
  • 明人不说暗话,跟着阿笨一起玩WinForm。本次分享课程属于《C#高级编程实战技能开发宝典课程系列》中的一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集...
  • Winform透明控件

    2019-09-18 05:51:31
    最新做一个项目,使用的是Winform,碰到一个问题,需要在后台执行某项任务的时候,画面显示“处理中”这样的半透明遮罩,Web项目中可以使用DIV(Css半透明),或者Wpf项目的话本身控件支持真透明(直接与DirectX进行...
  • 三、菜单功能winform 版的开发者常用工具箱,里边集成了 多为数据集查看器,json树形查看器,mdx查询工具,Mondrian 服务工具,Mondrian schema 编辑器,SQL大文件执行工具,大数据量测试数据生工工具等等,可以大大...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,358
精华内容 4,143
关键字:

winform效率