• NET基础课--WinForm开发推荐3


    用户体验

    较长时间的运算:使用进度条(progress bar)

    不要阻塞界面(UI)线程;使用多线程进行长时间的运算

    状态栏(status bar)提示应用程序的状态

    操作开始之后,用户应当能够通过界面操作取消或终止较长时间的运算

    增强用户体验:使得用户可以通过界面来控制程序的运行

    在适当的时候提供必要的程序开关

    验证用户的输入,使用validation control

    使用界面友好的MessageBox,注意要在提示对话框中使用适当的按钮和图标

    进度条(progress bar)

    对于时间较长的操作,要给用户提示当前完成的进度

    对于较长时间的操作,不要阻塞主线程,也就是UI线程

    可以使用ThreadPool.QueueUserWorkItem()来进行异步调用

    可以使用提供 取消/停止 的功能

    禁用一些菜单,通过可视化的方式提示用户在运行某些程序的时候某些功能是被禁用的

    当程序结束后,重新启用一些被禁止的菜单和控件,需要使用BeginInvoke和delegate

    状态栏

    StatusBar经常被放置在窗体的下面,建议使用dock

    我们可以在状态栏中提供多个面板(panel)来提供不同的信息

    通常都会有一个面板来提示程序运行的信息,和一些其它的面板,例如显示进度,时间等

    在长时间的后台程序之前,在状态栏中设置开始的状态信息

    在后台程序结束之后,清除状态信息或将状态信息设置为停止状态

    并在后台程序运行期间通过状态栏来显示必要的错误信息

    演示一

    进度栏(ProgressBar)和状态栏(StatusBar)

    image

    image

    image

    image

    使用等待指针

    如果有些操作必须是阻塞的,而且很难计算出这些操作的进度,这时需要使用等待指针(wait cursor)

    通过可视化的方式通知用户有一些程序正在执行过程中,可能需要等待一定的时间

    使用try……finally并在finally中将鼠标的指针重新设置为默认状态

    演示二

    设置鼠标的等待指针

    image

    image

    禁止适当的控件

    通过设置Enabled属性来控制控件是否可用,通过提示可视化的方式提示用户应用程序的执行状态 

    演示三

    禁用(disable)/启用(enable)控件

    image

    image

    image

    UpdateProgress方法是主窗体的方法,而EmulateLongProcess是非主线程调用的一个方法。当EmulateLongProcess里面想调用主线程中的方法时,我们就要做判断。其中InvokeRequired是WindowsForm的一个成员,当它的值为真时,表示当前这个方法的调用不是在同一个线程内调用的。也就是说调用UpdateProgress方法的来源绝非当前窗体所在线程。BeginInvoke方法是将方法的调用转嫁到当前线程去调用。也就是说让当前窗体所在的线程重新去执行一遍UpdateProgress。

    这样做是很必要的,因为当其他的线程想更新界面的元素的话,它最好去通知那个窗体的界面线程自己去更新。在这个例子中,当第一次进入UpdateProgress方法的时候是其他线程,因此它马上就会return。在return之前,它会让你的截面线程去调用Updateprogress。也就是说当第二次进入UpdateProgress的时候,InvokeRequired将变为false,界面线程就会执行下面的代码。这样在进度条走的时候,我们一样可以在主窗体上做其他事情,例如点击Stop让进度条停止。

    image

    image

    使用适当的控件

    使用TreeView控件来显示有层次的数据

    使用ListView来显示一组具有多个列的数据

    使用DataGrid控件可以让用户改变每一个单元格中的数据

    使用TabControl可以将窗体中的控件按照使用逻辑进行分类

    Splitters Docking与Anchoring

    用Splitter控件来分离用户区域

    使用Dock属性的Fill选项使控件能够填充屏幕的一部分

    设置Anchor可以在窗口大小变化时,保证窗体中的控件与窗体的相对位置不发生变化

    演示四

    Controls

    image

    Common Dialog Controls

    通过使用Common Dialog可以让用户通过熟悉的界面来实行标准的操作

    ColorDialog

    FontDialog

    OpenFileDialog

    PageSetupDialog

    PrintDialog

    PrintPreviewDialog

    SaveFileDialog

    演示五

    Common Dialog

    image image

    image image

    image image

    image

    image

    image

    更多的Control

    ImageList控件用于控制控件中使用的图像

    ListView

    TreeView

    ToolBar

    CheckedListBox

    DateTimePicker

    演示六

    更多的控件

    image

    image

    数组的性能

    数组——使用ListBox.Items.AddRange()可以增强性能

    使用Array.Sort对数组中的数据项进行排序

    实现IComparer接口来自定义排序的方法

    演示七

    数组

    image

    image

    Loop方式

    image

    AddRange方式

    image

    排序

    image

    使用向导

    使用向导会给用户带来标准的“Look and feel”

    使用向导能够让用户很容易就知道应该如何使用应用程序

    那么,我们需要将用户的操作过程按照逻辑划分为若干步骤

    参考资源

    C:Program FilesMicrosoft Visual Studio .NET 2003Common7IDEMicrosoft.VisualStudio.WizardFramework.dll

    演示八

    制作向导

    image

    image

    image

    image

    image image

  • 相关阅读:
    268. Missing Number
    Java中Synchronized的用法
    构造器里面的super()有什么用?到底写不写?
    android studio快速导入其他人的项目,避免下载gradle长时间卡住
    开发中遇到的问题---【Feign远程调用时,@PathVariable 注解中的value属性不能省略】
    我爱java系列---【次日凌晨00:00:00生效】
    开发中遇到的问题---【feign的多参数问题】
    我爱java系列---【springboot中分页插件pagehelper自定义返回结果类型】
    开发中遇到的问题---【当类型设置为Integer时,传入的值为0,会将其转化为空字符串,从而造成查询数据异常】
    我爱java系列---【mysql中的数据类型和java中的数据类型的对应】
  • 原文地址:https://www.cnblogs.com/tiantianle/p/4851914.html
Copyright © 2020-2023  润新知