用户体验

较长时间的运算:使用进度条(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的更多相关文章

  1. 【基于WinForm+Access局域网共享数据库的项目总结】之篇二:WinForm开发扇形图统计和Excel数据导出

    篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...

  2. WPF与WinForm开发有什么区别?

    转自http://hi.baidu.com/leoliu83/blog/item/1d1a4a66dcb41134aa184cfd.html WPF开发于WinForm之后,从技术发展的角度,WPF比 ...

  3. Navi.Soft30.框架.WinForm.开发手册

    阅读导航 Navi.Soft30.Core类库.开发手册 http://www.cnblogs.com/xiyang1011/p/5709489.html Navi.Soft30.框架.WinForm ...

  4. 基于BindingSource的WinForm开发

    BindingSource控件介绍 BindingSource控件介绍 BindingSource控件是.NET Framework 2.0提供的新控件之一.BindingSource控件与数据源建立 ...

  5. C# WinForm开发系列 - 文章索引

    该系列主要整理收集在使用C#开发WinForm应用文章及相关代码, 平时看到大家主要使用C#来开发Asp.Net应用,这方面的文章也特别多,而关于WinForm的文章相对少很多,而自己对WinForm ...

  6. C# WinForm开发系列 - DataGrid/DataGridView

    在WinForm开发中,DataGrid/DataGridView被广泛使用于绑定数据库中数据进行呈现.整理一些关于DataGrid/DataGridView使用的文章,涉及DataGrid/Data ...

  7. 【基于WinForm+Access局域网共享数据库的项目总结】之篇一:WinForm开发总体概述与技术实现

    篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...

  8. Java进击C#——应用开发之WinForm开发

    本章简言 上一章笔者介绍了关于WinForm环境.这一章笔者将继续讲WinForm.只不过更加的面向开发了.事实就是在学习工具箱里面的控件.对于WinForm开发来讲,企业对他的要求并没有那么高.但是 ...

  9. WinForm开发-界面控件到实体,实体到界面控件自动绑定

    在WinForm开发中,我们是不是为绑定界面控件的数据而每个控件每个控件的赋值?在保存修改时是不是也是每个控件每个控件的赋值到实体中?字段一多,那简直就是噩梦.有没有像Web中那样方便的方法直接就自动 ...

随机推荐

  1. python 技巧 之 pyCharm快速添加第三方库和插件

    学习python有几个月,安装第三方库都是通过 pip install 或者 easy_install.每次都要打开命令行感觉太麻烦.还好Pycharm提供了安装第三方库和安装插件的功能. 首先打开P ...

  2. Unity-资源

    模型.材质.动画 Unity的默认系统单位为"米" 三维软件 三维软件内部米制尺寸/m 默认设置导入Unity中的尺寸/m 与Unity单位的比例关系 Maya 1 100 1:1 ...

  3. After a rest, go on

    busy during the whole May holiday. running between S and H, waste much time leaving things behind. t ...

  4. git add和被ignore的文件

    如果有如下的目录结构: workspace tree | --------------------- |                             | hello.c           ...

  5. android ant 最简单的打包签名,混淆方法

    使用ant打包,如果脚本都是我们自己一步一步来写的话,是一个比较麻烦的东西. 关于ant,我们详细看下: ant支持 ant debug,ant release等命令,我们需要签名混淆,那么就需要an ...

  6. jetty 8.1.8 PWC6345: There is an error in invoking javac. A full JDK (not just JRE) is required

    应该是jdk和jre配置问题,建议看看这个博客:http://blog.csdn.net/nba_2011/article/details/7219750里边查看配置方法很清楚

  7. date用法

    日常工作中经常使用date这个命令,几乎所有与日期时间相关的操作都会跟这个命令扯上点关系.简单写几条经常使用到的date命令,仅供大家参考. 首先检查一下date的版本,注意如果你用的不是GNU da ...

  8. SqlServer排序(null值,和非空值排列顺序)

    项目中遇到一个问题,需要设置序号排序,而该字段中的默认值为空,使用普通排序,空值就会在最前边.可以使用如下语句:   其中 col 为 排序的字段名称. then 0 else 1 代表先空值,后数字 ...

  9. [C++程序设计]有关形参与实参,及返回值说明

    有关形参与实参的说明:(1) 在定义函数时指定的形参,在未出现函数调用 时,它们并不占内存中的存储单元,因此称它们是 形式参数或虚拟参数,表示它们并不是实际存在的数据,只有在发生函数调用时,函数max ...

  10. [转]设置MS Office Word for mac的默认显示比例

    由于mac os的分辨率比较大,在PC上显示正常的word文档(显示比例100%),在mac下打开会很小,需要经常调整显示比例,如调到125%.130%或150%,可以通过下面方法来设置默认显示比例, ...