NET基础课--WinForm开发推荐3
用户体验
较长时间的运算:使用进度条(progress bar)
不要阻塞界面(UI)线程;使用多线程进行长时间的运算
状态栏(status bar)提示应用程序的状态
操作开始之后,用户应当能够通过界面操作取消或终止较长时间的运算
增强用户体验:使得用户可以通过界面来控制程序的运行
在适当的时候提供必要的程序开关
验证用户的输入,使用validation control
使用界面友好的MessageBox,注意要在提示对话框中使用适当的按钮和图标
进度条(progress bar)
对于时间较长的操作,要给用户提示当前完成的进度
对于较长时间的操作,不要阻塞主线程,也就是UI线程
可以使用ThreadPool.QueueUserWorkItem()来进行异步调用
可以使用提供 取消/停止 的功能
禁用一些菜单,通过可视化的方式提示用户在运行某些程序的时候某些功能是被禁用的
当程序结束后,重新启用一些被禁止的菜单和控件,需要使用BeginInvoke和delegate
状态栏
StatusBar经常被放置在窗体的下面,建议使用dock
我们可以在状态栏中提供多个面板(panel)来提供不同的信息
通常都会有一个面板来提示程序运行的信息,和一些其它的面板,例如显示进度,时间等
在长时间的后台程序之前,在状态栏中设置开始的状态信息
在后台程序结束之后,清除状态信息或将状态信息设置为停止状态
并在后台程序运行期间通过状态栏来显示必要的错误信息
演示一
进度栏(ProgressBar)和状态栏(StatusBar)
![]()
![]()
![]()
![]()
使用等待指针
如果有些操作必须是阻塞的,而且很难计算出这些操作的进度,这时需要使用等待指针(wait cursor)
通过可视化的方式通知用户有一些程序正在执行过程中,可能需要等待一定的时间
使用try……finally并在finally中将鼠标的指针重新设置为默认状态
演示二
设置鼠标的等待指针
![]()
![]()
禁止适当的控件
通过设置Enabled属性来控制控件是否可用,通过提示可视化的方式提示用户应用程序的执行状态
演示三
禁用(disable)/启用(enable)控件
![]()
![]()
![]()
UpdateProgress方法是主窗体的方法,而EmulateLongProcess是非主线程调用的一个方法。当EmulateLongProcess里面想调用主线程中的方法时,我们就要做判断。其中InvokeRequired是WindowsForm的一个成员,当它的值为真时,表示当前这个方法的调用不是在同一个线程内调用的。也就是说调用UpdateProgress方法的来源绝非当前窗体所在线程。BeginInvoke方法是将方法的调用转嫁到当前线程去调用。也就是说让当前窗体所在的线程重新去执行一遍UpdateProgress。
这样做是很必要的,因为当其他的线程想更新界面的元素的话,它最好去通知那个窗体的界面线程自己去更新。在这个例子中,当第一次进入UpdateProgress方法的时候是其他线程,因此它马上就会return。在return之前,它会让你的截面线程去调用Updateprogress。也就是说当第二次进入UpdateProgress的时候,InvokeRequired将变为false,界面线程就会执行下面的代码。这样在进度条走的时候,我们一样可以在主窗体上做其他事情,例如点击Stop让进度条停止。
![]()
![]()
使用适当的控件
使用TreeView控件来显示有层次的数据
使用ListView来显示一组具有多个列的数据
使用DataGrid控件可以让用户改变每一个单元格中的数据
使用TabControl可以将窗体中的控件按照使用逻辑进行分类
Splitters Docking与Anchoring
用Splitter控件来分离用户区域
使用Dock属性的Fill选项使控件能够填充屏幕的一部分
设置Anchor可以在窗口大小变化时,保证窗体中的控件与窗体的相对位置不发生变化
演示四
Controls
![]()
Common Dialog Controls
通过使用Common Dialog可以让用户通过熟悉的界面来实行标准的操作
ColorDialog
FontDialog
OpenFileDialog
PageSetupDialog
PrintDialog
PrintPreviewDialog
SaveFileDialog
演示五
Common Dialog
![]()
![]()
![]()
![]()
![]()
![]()
更多的Control
ImageList控件用于控制控件中使用的图像
ListView
TreeView
ToolBar
CheckedListBox
DateTimePicker
演示六
更多的控件
![]()
![]()
数组的性能
数组——使用ListBox.Items.AddRange()可以增强性能
使用Array.Sort对数组中的数据项进行排序
实现IComparer接口来自定义排序的方法
演示七
数组
![]()
![]()
Loop方式
![]()
AddRange方式
![]()
排序
![]()
使用向导
使用向导会给用户带来标准的“Look and feel”
使用向导能够让用户很容易就知道应该如何使用应用程序
那么,我们需要将用户的操作过程按照逻辑划分为若干步骤
参考资源
C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE\Microsoft.VisualStudio.WizardFramework.dll
演示八
制作向导
![]()
![]()
![]()
![]()
![]()
NET基础课--WinForm开发推荐3的更多相关文章
- 【基于WinForm+Access局域网共享数据库的项目总结】之篇二:WinForm开发扇形图统计和Excel数据导出
篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...
- WPF与WinForm开发有什么区别?
转自http://hi.baidu.com/leoliu83/blog/item/1d1a4a66dcb41134aa184cfd.html WPF开发于WinForm之后,从技术发展的角度,WPF比 ...
- Navi.Soft30.框架.WinForm.开发手册
阅读导航 Navi.Soft30.Core类库.开发手册 http://www.cnblogs.com/xiyang1011/p/5709489.html Navi.Soft30.框架.WinForm ...
- 基于BindingSource的WinForm开发
BindingSource控件介绍 BindingSource控件介绍 BindingSource控件是.NET Framework 2.0提供的新控件之一.BindingSource控件与数据源建立 ...
- C# WinForm开发系列 - 文章索引
该系列主要整理收集在使用C#开发WinForm应用文章及相关代码, 平时看到大家主要使用C#来开发Asp.Net应用,这方面的文章也特别多,而关于WinForm的文章相对少很多,而自己对WinForm ...
- C# WinForm开发系列 - DataGrid/DataGridView
在WinForm开发中,DataGrid/DataGridView被广泛使用于绑定数据库中数据进行呈现.整理一些关于DataGrid/DataGridView使用的文章,涉及DataGrid/Data ...
- 【基于WinForm+Access局域网共享数据库的项目总结】之篇一:WinForm开发总体概述与技术实现
篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...
- Java进击C#——应用开发之WinForm开发
本章简言 上一章笔者介绍了关于WinForm环境.这一章笔者将继续讲WinForm.只不过更加的面向开发了.事实就是在学习工具箱里面的控件.对于WinForm开发来讲,企业对他的要求并没有那么高.但是 ...
- WinForm开发-界面控件到实体,实体到界面控件自动绑定
在WinForm开发中,我们是不是为绑定界面控件的数据而每个控件每个控件的赋值?在保存修改时是不是也是每个控件每个控件的赋值到实体中?字段一多,那简直就是噩梦.有没有像Web中那样方便的方法直接就自动 ...
随机推荐
- java中的二进制
(1)按位与运算 & 1 & 1 = 1, 0 & 1 = 0 51 & 5 即 0011 0011 & 0000 0101 =0000 0001 = 1 ...
- JAVA反射机制示例,读取excel数据映射到JAVA对象中
import java.beans.PropertyDescriptor; import java.io.File; import java.io.FileInputStream; import ja ...
- css_day5
- Windows - 远程桌面无证书
可以从命令行启动远程桌面,输入:mstsc /v:地址:端口 /admin
- javascript事件捕获与冒泡
对“捕获”和“冒泡”这两个概念,我想我们对冒泡更熟悉一些,因为在我们使用的所有浏览器中,都支持事件冒泡,即事件由子元素向祖先元素传播的,就 像气泡从水底向水面上浮一样.而在像firefox,chrom ...
- < meta http-equiv = "X-UA-Compatible" content = "IE=edge,chrome=1" />的作用
< meta http-equiv = "X-UA-Compatible" content = "IE=edge,chrome=1" /> 介绍:这 ...
- java直接打开pdf,doc,xls
jsp页面: <a href=\'#\' onclick=onLine(\''+urls[i]+'\') >在线打开</a> html页面超链接单击打开online函数 var ...
- mysql 针对单张表的备份与还原
A.MySQL 备份工具xtrabackup 的安装 . percona 官方xtrabackup 的二进制版本:二进制版本解压就能用了. . 解压xtrabackup & 创建连接 -Lin ...
- linux中如何使用微软鼠标的第4、5键
虽说使用linux的 人大都对微软没什么好感,但不能否认微软确实也出了不少好东西呀,比如微软鼠标(IE系列) icon_smile.gif IE 2.0和以上版本都有5个按钮,除了正常的左中右外,两侧 ...
- freebsd安装和图形界面安装
通过上述的安装以后只有命令行界面,没有图形界面,如果想使用X Window就需要安装X 11和GNOME(或KDE). 1. 安装X 11(用root账户) 在确保虚拟机的CD-ROM加载了FreeB ...