Win开发框架之同化对话框样式.doc_第1页
Win开发框架之同化对话框样式.doc_第2页
Win开发框架之同化对话框样式.doc_第3页
Win开发框架之同化对话框样式.doc_第4页
Win开发框架之同化对话框样式.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Winform开发框架之同化对话框样式本文将谈到Winform开发框架中的同化对话框样式,三个不同的对话框封装类,专门为不同的Winform界面样式服务,接口一样,返回的对话框结果一样。早在随笔中,就集成了三种界面样式的分页控件,后来也就形成了我三种不同的Winform开发框架界面样式。1)基于传统经典模式的界面,采用了OutLookBar工具条以及鼎鼎有名的Weifengluo多文档布局控件,集成了分页控件、使用基于Apose.Cell控件的自定义报表等功能,能适应大多数业务系统的引用。框架数据编辑界面、普通查询窗体界面均采用窗体集成模式,简化开发代码,提高窗体开发效率以及统一界面的一致性。2)在基于传统经典模式的Winform框架基础上,引入DotNetBar优秀的界面组件,对界面的样式,布局均由很大程度的提升。工具栏统一集中放置在Ribbon工具条上,可以折叠分组等,另外也支持多文档的界面操作,非常方便和美观。3)基于DevExpress界面设计也在基于传统经典模式的Winform框架基础上,引入DotNet最为优秀的界面组件DevExpress,对界面布局、样式等模块提升到一个极高的高度,同时提供该样式的分页控件,使得整合更加完美。介绍三种框架的布局及大致样式后,言归正传,介绍在Winform开发中,经常用到的对话框操作的封装,一般的对话框操作,包括有各种不同的方式,传统方式如下所示。以上图片是Win7的效果,XP或者2000下基本上是灰头土脸的效果,如果但在不同的界面样式中,就不能一直用MessageBox.Show这个方法了,因为不同的界面样式提供了不同的对话框封装操作。下面分别介绍基于传统方式、基于DotNetBar界面控件方式、基于DevExpress界面样式方式,三种方式的对话框处理封装类。1)、传统方式的对话框处理封装类代码如下1. publicclassMessageUtil 2. 3. /显示一般的提示信息 4. /提示信息 5. publicstaticDialogResultShowTips(stringmessage) 6. 7. returnMessageBox.Show(message,提示信息,MessageBoxButtons.OK,MessageBoxIcon.Information); 8. 9. /显示警告信息 10. /警告信息 11. publicstaticDialogResultShowWarning(stringmessage) 12. 13. returnMessageBox.Show(message,警告信息,MessageBoxButtons.OK,MessageBoxIcon.Warning); 14. 15. /显示错误信息 16. /错误信息 17. publicstaticDialogResultShowError(stringmessage) 18. 19. returnMessageBox.Show(message,错误信息,MessageBoxButtons.OK,MessageBoxIcon.Error); 20. 21. /显示询问用户信息,并显示错误标志 22. /错误信息 23. publicstaticDialogResultShowYesNoAndError(stringmessage) 24. 25. returnMessageBox.Show(message,错误信息,MessageBoxButtons.YesNo,MessageBoxIcon.Error); 26. 27. /显示询问用户信息,并显示提示标志 28. /错误信息 29. publicstaticDialogResultShowYesNoAndTips(stringmessage) 30. 31. returnMessageBox.Show(message,提示信息,MessageBoxButtons.YesNo,MessageBoxIcon.Information); 32. 33. /显示询问用户信息,并显示警告标志 34. /警告信息 35. publicstaticDialogResultShowYesNoAndWarning(stringmessage) 36. 37. returnMessageBox.Show(message,警告信息,MessageBoxButtons.YesNo,MessageBoxIcon.Warning); 38. 39. /显示询问用户信息,并显示提示标志 40. /错误信息 41. publicstaticDialogResultShowYesNoCancelAndTips(stringmessage) 42. 43. returnMessageBox.Show(message,提示信息,MessageBoxButtons.YesNoCancel,MessageBoxIcon.Information); 44. 45. /显示一个YesNo选择对话框 46. /对话框的选择内容提示信息/如果选择Yes则返回true,否则返回false 47. publicstaticboolConfirmYesNo(stringprompt) 48. 49. returnMessageBox.Show(prompt,确认,MessageBoxButtons.YesNo,MessageBoxIcon.Question)=DialogResult.Yes; 50. 51. /显示一个YesNoCancel选择对话框 52. /对话框的选择内容提示信息/返回选择结果的的DialogResult值 53. publicstaticDialogResultConfirmYesNoCancel(stringprompt) 54. 55. returnMessageBox.Show(prompt,确认,MessageBoxButtons.YesNoCancel,MessageBoxIcon.Question); 56. 57. 2 )DotNetBar样式中对话框处理封装类如下所示1. publicclassMessageExUtil 2. 3. /显示一般的提示信息 4. /提示信息 5. publicstaticDialogResultShowTips(stringmessage) 6. 7. returnMessageBoxEx.Show(message,提示信息,MessageBoxButtons.OK,MessageBoxIcon.Information); 8. 9. /显示警告信息 10. /警告信息 11. publicstaticDialogResultShowWarning(stringmessage) 12. 13. returnMessageBoxEx.Show(message,警告信息,MessageBoxButtons.OK,MessageBoxIcon.Warning); 14. 15. /显示错误信息 16. /错误信息 17. publicstaticDialogResultShowError(stringmessage) 18. 19. returnMessageBoxEx.Show(message,错误信息,MessageBoxButtons.OK,MessageBoxIcon.Error); 20. 21. /显示询问用户信息,并显示错误标志 22. /错误信息 23. publicstaticDialogResultShowYesNoAndError(stringmessage) 24. 25. returnMessageBoxEx.Show(message,错误信息,MessageBoxButtons.YesNo,MessageBoxIcon.Error); 26. 27. /显示询问用户信息,并显示提示标志 28. /错误信息 29. publicstaticDialogResultShowYesNoAndTips(stringmessage) 30. 31. returnMessageBoxEx.Show(message,提示信息,MessageBoxButtons.YesNo,MessageBoxIcon.Information); 32. 33. /显示询问用户信息,并显示警告标志 34. /警告信息 35. publicstaticDialogResultShowYesNoAndWarning(stringmessage) 36. 37. returnMessageBoxEx.Show(message,警告信息,MessageBoxButtons.YesNo,MessageBoxIcon.Warning); 38. 39. /显示询问用户信息,并显示提示标志 40. /错误信息 41. publicstaticDialogResultShowYesNoCancelAndTips(stringmessage) 42. 43. returnMessageBoxEx.Show(message,提示信息,MessageBoxButtons.YesNoCancel,MessageBoxIcon.Information); 44. 45. 3)DevExpress样式中对话框处理封装类如下所示1. publicclassMessageDxUtil 2. 3. /显示一般的提示信息 4. /提示信息 5. publicstaticDialogResultShowTips(stringmessage) 6. 7. returnDevExpress.XtraEditors.XtraMessageBox.Show(message,提示信息,MessageBoxButtons.OK,MessageBoxIcon.Information); 8. 9. /显示警告信息 10. /警告信息 11. publicstaticDialogResultShowWarning(stringmessage) 12. 13. returnDevExpress.XtraEditors.XtraMessageBox.Show(message,警告信息,MessageBoxButtons.OK,MessageBoxIcon.Warning); 14. 15. /显示错误信息 16. /错误信息 17. publicstaticDialogResultShowError(stringmessage) 18. 19. returnDevExpress.XtraEditors.XtraMessageBox.Show(message,错误信息,MessageBoxButtons.OK,MessageBoxIcon.Error); 20. 21. /显示询问用户信息,并显示错误标志 22. /错误信息 23. publicstaticDialogResultShowYesNoAndError(stringmessage) 24. 25. returnDevExpress.XtraEditors.XtraMessageBox.Show(message,错误信息,MessageBoxButtons.YesNo,MessageBoxIcon.Error); 26. 27. /显示询问用户信息,并显示提示标志 28. /错误信息 29. publicstaticDialogResultShowYesNoAndTips(stringmessage) 30. 31. returnDevExpress.XtraEditors.XtraMessageBox.Show(message,提示信息,MessageBoxButtons.YesNo,MessageBoxIcon.Information); 32. 33. /显示询问用户信息,并显示警告标志 34. /警告信息 35. publicstaticDialogResultShowYesNoAndWarning(stringmessage) 36. 37. returnDevExpress.XtraEditors.XtraMessageBox.Show(message,警告信息,MessageBoxButtons.YesNo,MessageBoxIcon.Warning); 38. 39. /显示询问用户信息,并显示提示标志 40. /错误信息 41. publicstaticDialogResultShowYesNoCancelAndTips(stringmessage) 42. 43. returnDevExpress.XtraEditors.XtraMessageBox.Show(message,提示信息,MessageBoxButtons.YesNoCancel,MessageBoxIcon.Information); 44. 45. 三个不同的对话框封装类,专门为不同的Winform界面样式服务,接口一样,返回的对话框结果一样,简化了对这些常用的操作封装的同时,也使得界面的整体性达到更一致,用户体验更好,否则在漂亮的DevExpress界面效果中,突然弹出一个灰头土脸的对话框提示信息,甚是大煞风景,给使用者不好的印象。以上是我在我的三种界面样式的Winform开发框架中常用到的类,希望对大家有所帮助,并能在具体的项目中应用,有时间就推荐一下,在此感谢大家支持。详解WinForm窗体间交互的方法本文将为大家介绍的是WinForm窗体之间的数据交互等问题,包括自定义一个构造函数等等问题实际上过去我也写过类似的主题,这里把各种方法总结一下,内容的确基础了一些,所以这篇文章是写给刚刚学习C#的同行们的,希望对大家有些帮助吧!很抱歉,这篇文章没有诡异的bug来勾起大家的兴趣,但是下篇文章我会努力写些有趣的主题的在窗体间传递数据的方法比较多:1,在子窗体中自定义一个构造函数,参数类型是主窗体,当要显示子窗体的时候,就用这个构造函数来实例化子窗体,然后把this指针传进去,说起来太抽象了,我大概一写大家应该就明白了:1. publicclassfrmMain:Form 2. 3. . 4. frmControlcontrolForm=newfrmControl(this); 5. controlForm.Show(); 6. 7. publicclassfrmControl:Form/子窗体,用来控制主窗体的某些显示! 8. 9. privatefrmMainmainForm; 10. publicfrmControl(frmMainmainForm) 11. 12. this.mainForm=mainForm; 13. 14. privatevoidbutton1_Click(objectsender,EventArgse) 15. 16. frmMain.textBox1.Text=this.textBox1.Text;/把子窗体的文本框值传递给主窗体的文本框! 17. 18. 2,我个人感觉上面的方法不是很好,虽然实现起来很简单,只是想改变窗体的标题文本,就把整个主窗体的引用都传递给子窗体,这样的方式不是很幽雅,我们用接口来改进上面的方法,这样可以限制暴露给子窗体的功能,降低窗体之间的耦合度:1. publicinterfaceIChangeTitle: 2. 3. voidChangeTitle(stringtitle); 4. 5. publicclassfrmMain:Form,IChangeTitle 6. 7. . 8. frmControlcontrolForm=newfrmControl(this); 9. controlForm.Show(); 10. publicvoidChangeTitle(stringtitle) 11. 12. this.Text=title; 13. 14. 15. publicclassfrmControl:Form/子窗体,用来控制主窗体的某些显示! 16. 17. privateIChangeTitleichangeTitle; 18. publicfrmControl(IChangeTitleichangeTitle) 19. 20. this.ichangeTitle=ichangeTitle; 21. 22. privatevoidbutton1_Click(objectsender,EventArgse) 23. 24. ichangeTitle.ChangeTitle(this.textBox1.Text);/通过接口来调用方法 25. 26. 27. 28. 3,为了进一步降低窗体之间的耦合度,我们可以用委托来实现这个需求:1. publicpartialclassChildForm:Form 2. 3. publicdelegatevoidTitleChangedHandler(stringtitle); 4. publicTitleChangedEventHandlerTitleChanged; 5. publicChildForm() 6. 7. InitializeComponent(); 8. 9. 10. 11. privatevoidbtn_Ok_Click(objectsender,EventArgse) 12. 13. if(TitleChanged!=null) 14. TitleChanged(TestTitle);/委托调用 15. 16. 17. 主窗体给委托变量赋值就可以了:1. publicpartialclassMainForm:Form 2. 3. privateChildFormloginForm=newChildForm(); 4. publicMainForm() 5. 6. InitializeComponent(); 7. loginForm.TitleChanged=newChildForm.TitleChangedEventHandler(FormTitleChanged); 8. 9. 10. protectedvoidFormTitleChanged(stringtitle) 11. 12. this.Text=title; 13. 14. 15. privatevoidbutton1_Click(objectsender,EventArgse) 16. 17. loginForm.Show(); 18. 19. 4,也可以在子窗体中定义一个自定义的事件,然后自定义一个事件参数,用来传递你想传递的一些信息:1. publicpartialclassChildForm:Form 2. 3. publicclassTitleChangedEventArgs:EventArgs/事件参数类 4. 5. privatestringtitle=; 6. publicstringTitle 7. 8. get9. 10. returntitle; 11. 12. set13. 14. title=value; 15. 16. 17. 18. publicdelegatevoidTitleChangedEventHandler(objectsender,TitleChangedEventArgse); 19. publiceventTitleChangedEventHandlerTitleChanged; 20. publicChildForm() 21. 22. InitializeComponent(); 23. 24. 25. 26. privatevoidbtn_Ok_Click(objectsender,EventArgse) 27. 28. TitleChangedEventArgse1=newTitleChangedEventArgs(); 29. e1.Title=Loginsucessed; 30. OnTitleChanged(e1);/触发事件 31. 32. 33. protectedvirtualvoidOnTitleChanged(TitleChangedEventArgse)/触发事件的方法 34. 35. if(TitleChanged!=null) 36. TitleChanged(this,e); 37. 38. 主窗体订阅这个事件就可以了:1. publicpartialclassMainForm:Form 2. 3. privateChildFormloginForm=newChildForm(); 4. publicMainForm() 5. 6. InitializeComponent(); 7. loginForm.TitleChanged+=newChildForm.TitleChangedEventHandler(FormTitleChanged); 8. 9. 10. protectedvoidFormTitleChanged(objectsender,ChildForm.TitleChangedEventArgse) 11. 12. this.Text=e.Title; 13. 14. 15. privatevoidbutton1_Click(objectsender,EventArgse) 16. 17. loginForm.Show(); 18. 19. 探讨WPF开发工作站相关知识WPF开发工作站的创建是一个非常基础的知识点。我们可以通过这篇文章介绍的内容详细的掌握这一创建爱你技巧,提高编程效率。WPF的出现解决了大多数开发人员在实际开发中关于图形界面的一些局限性。你已经确信WPF是下一代应用程序的战略级技术,你已打算利用这个机会好好规划并重新安装你的开发工作站。 WPF Dispatcher在界面操作中作用体现 WPF路径描述方式解析 探讨WPF按钮实现特殊效果 在开发应用中WPF优点的体现 WPF支持国际化实现方式解析 那么你应该在这个工作站上放些什么,才可以创建一个完美的WPF开发环境呢? 有许多出色的工具和例子,我认为我应该把它们汇总到一个清单中从而使大家从中受益。 我也想听听你们的意见,如果我有漏掉的东西请告诉我, 我会不断地更新这份帖子。WPF开发工作站基本环境Windows Vista,当然需要! (虽然在Windows XP SP2上也会工作得很好)Visual Studio 2005(带SP1和Windows Vista支持文件)Visual Studio 2005 Extensions for .NET Framework 3.0Windows SDKExpression Blend与Expression DesignWPF开发工作站工具XamlPadX, Kaxaml 与XamlCruncher:: 用来替代XamlPad工具的三个增强性工具,它们是在Windows SDK中的。 每一个工具都有它的强项: XamlPadX拥有很多出色的插件,它是基于XamlPad代码写出来的;Kaxaml用于演示很不错,对间距和tab支持很好;XamlCruncher有一段高质量的可用源代码。Lutz Roeders .NET Reflector: 可以方便浏览类层次;Snoop: 调试WPF应用程序的可视化工具,由Peter Blois开发WPF Performance Tools: 被埋没在SDK中的工具,应用程序工具集的必要组成部分。 你可以在%SdkTools%WpfPerf.exe 找到它(如果你使用的是Vista,请确保你是以管理员身份运行它的,即run as an administrator)Flexible Application Template: 从应用服务PM中的一个得到替代项目模板,允许你创建一个单独的应用程序项目,只需要改变项目类型就可以让项目变成XBAP或富客户端应用程序。(原文:this replacement project template from one of the app services PMs allows you to create a single application project that can flip between an XBAP (web browser project) or rich client application just with an adjustment to the project type; )ZAM 3D: Electric Rain的工具,用于快速创建3D网格,并让3D网格动起来XAML Converters: 将3DS, DXF, Blender, Fireworks, Lightwave, SWF, Maya 及Illustrator的文章转换为XAML格式的工具WPF开发工作站创建一个代码工具箱3D Tools for WPF: 3D表面的交互式2D、物体边框线、3D鼠标导航;Kevins Bag-o-Tricks: 控件集合,扩展并增强一些WPF自带的类型,如ColorPicker、FolderPicker、NumericUpDown、RadioButtonList、数据控件、动画版tile panel和图形控件UI Automation Stress: 应用程序环境压力测试。 将这个代码加入Debug菜单,这样可以保证你不会因为错误输入而让你的应用程序崩溃。WPF开发工作站示例应用程序我是那种喜欢有许多示例代码的程序员,这样我就可以从中拷贝概念、想法和技术。 拷贝以下这些示例示例到samples目录中:Patient Monitoring SampleWoodgrove Finance SampleThailand Sample也请把%SdkTools%.SamplesWPFSamples.zip解压到samplessdk目录中,这样你可以很方便地浏览所有的例子而不用去看SDK文档接口。现在启用Windows Desktop Search(点这里安装WDS 3.0,如果你正在运行Windows XP,并把它配置为对.xaml,.cs,.vb文件内容进行索引) 请确保设置了对整个samples目录进行索引,因为你把所有的示例都放在里面了。 现在,你可以很快遍历每个示例,只需要按下Win+F,搜索BitmapSource 和ColorConvertedBitmap关键字,就可以看到这两个关键字的使用情况。WPF开发工作站技术支持WPF MSDN论坛是产品组和其他资深社区成员经常光顾的地方,有许多以前问过的问题(和答案);WPF MSDN Newsgroup提供了一个与web论坛非常相似的服务,但是它是基于USENET新闻组形式的。 在写本书时,那个论坛似乎访问量更大了。WPF开发工作站提示和技巧确保在你的系统中把Windows SDK文档与其它的MSDN文档融合在一起了 以管理员身份运行 Start - Windows SDK - Visual Studio Registration - Integrate Windows SDK with Visual Studio 2005,这样只需要从代码视图中按F1就可以了。我在开始菜单中加入了一些快捷方式,这样可以方便地访问这些工具,特别是XamlPad, WpfPerf和其他一些默认情况下隐藏的工具。 如果你运行的是Windows Vista,这个提示将给你一条访问每个项的捷径如果你运行的是Windows Vista,设置WPF字体缓存系统服务(Windows Presentation Foundation Font Cache)为Automatic(Delayed Start)(自动,延迟启动),这样可以减少WPF应用程序的启动时间。在Visual Studio中,设置默认的字体为Consolas 该字体看上去比Courier New更清楚,是专门设计用来作代码开发的。 Consolas包含在Windows Vista或Office 2007中的,或者你可以从这里下载该字体。在Windows SDK文档系统中,”New in Windows Vista”索引过滤器是一个很不错的方式,它可以防止WPF和Windows Forms API有时被混在一起的问题。我遇到过一些开发人员偶尔会同时找到这两个库中的同名类型,因为WPF开发工作站文档中没有给出一些细节来区分这些类型。WPF Dispatcher在界面操作中作用体现WPF Dispatcher作为一个在界面操作和更新时被UI线程关联的唯一对象,起了一个非常重要的作用。他可以帮助我们实现按序排列的工作项队列。对于一个开发人员来说,可能在开发一个程序的时候对图形界面的要求并不是很高,因为他们不是美工。那么,使用了WPF后,开发人员可以轻松的实现精美的图形界面。 WPF Listbox生成方式介绍 实现WPF淡入效果方式技巧分享 WPF Dependency相关特点介绍 WPF URI总结概览 WPF Application性能讲解 使用一个专用的 UI 线程来完成界面的操作和更新,这个线程会关联一个唯一的WPF Dispatcher 对象,用于调度按优先顺序排列的工作项队列。Application.Run() 实际上就是对 Dispatcher.Run() 的间接调用。WPF Dispatcher通过循环来处理工作项队列,这个循环通常被成为 帧 (DispatcherFrame)。Dispatcher.Run() 创建并启动这个帧,这也是 Application.Run() 启动消息循环的最终途径。1. publicsealedclassDispatcher 2. 3. SecurityCritical,UIPermission(SecurityAction.LinkDemand,Unrestricted=true) 4. publicstaticvoidRun() 5. 6. PushFrame(newDispatcherFrame(); 7. 8. DispatcherFrame 可以嵌套,并通过检查 Continue 属性来决定循环是否继续。我们可以通过调用 Dispatcher.ExitAllFrames() 来终止所有的帧循环,当然这种编程方式并不可取,可能会造成一些意外出现。与WPF Dispatcher调度对象想对应的就是 DispatcherObject,在 WPF 中绝大部分控件都继承自 DispatcherObject,甚至包括 Application。这些继承自 DispatcherObject 的对象具有线程关联特征,也就意味着只有创建这些对象实例,且包含了 Dispatcher 的线程(通常指默认 UI 线程)才能直接对其进行更新操作。当我们尝试从一个非 UI 线程更新一个标签,会看到一个如下的异常。1. privatevoidbutton1_Click(objectsender,RoutedEventArgse) 2. 3. newThread()=this.label1.Content=DateTime.Now.ToString().Start(); 4. 按照 DispatcherObject 的限制原则,我们改用 Window.Dispatcher.Invoke() 即可顺利完成这个更新操作。1. privatevoidbutton1_Click(objectsender,RoutedEventArgse) 2. 3. newThread()=4. 5. this.Dispatcher.Invoke(DispatcherPriority.Normal, 6. newAction()=this.label1.Content=DateTime.Now.ToString(); 7. ).Start(); 8. 如果在其他项目(比如类库)中,我们可以用 Application.Current.Dispatcher.Invoke(.) 完成同样的操作,它们都指向 UI Thread Dispatcher 这个唯一对象。WPF Dispatcher还提供了 BeginInvoke 这个异步版本。1. privatevoidbutton1_Click(objectsender,RoutedEventArgse) 2. 3. newThread()=4. 5. Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, 6. newAction()=7. 8. Thread.Sleep(3000); 9. this.label1.Content=DateTime.Now.ToString(); 10. ); 11.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论