Winform开发框架之同化对话框样式

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.public class MessageUtil

2.{

3.///

///显示一般的提示信息

4.///

///提示信息

5.public static DialogResult ShowTips(string message)

6.{

7.return MessageBox.Show(message,"提示信息

",MessageBoxButtons.OK,https://www.360docs.net/doc/6d183289.html,rmation);

8.}

9.///

///显示警告信息

10.///

///警告信息

11.public static DialogResult ShowWarning(string message)

12.{

13.return MessageBox.Show(message,"警告信息

",MessageBoxButtons.OK,MessageBoxIcon.Warning);

14.}

15.///

///显示错误信息

16.///

///错误信息

17.public static DialogResult ShowError(string message)

18.{

19.return MessageBox.Show(message,"错误信息

",MessageBoxButtons.OK,MessageBoxIcon.Error);

20.}

21.///

///显示询问用户信息,并显示错误标志

22.///

///错误信息

23.public static DialogResult ShowYesNoAndError(string message)

24.{

25.return MessageBox.Show(message,"错误信息

",MessageBoxButtons.YesNo,MessageBoxIcon.Error);

26.}

27.///

///显示询问用户信息,并显示提示标志

28.///

///错误信息

29.public static DialogResult ShowYesNoAndTips(string message)

30.{

31.return MessageBox.Show(message,"提示信息

",MessageBoxButtons.YesNo,https://www.360docs.net/doc/6d183289.html,rmation);

32.}

33.///

///显示询问用户信息,并显示警告标志

34.///

///警告信息

35.public static DialogResult ShowYesNoAndWarning(string message)

36.{

37.return MessageBox.Show(message,"警告信息

",MessageBoxButtons.YesNo,MessageBoxIcon.Warning);

38.}

39.///

///显示询问用户信息,并显示提示标志

40.///

///错误信息

41.public static DialogResult ShowYesNoCancelAndTips(string message)

42.{

43.return MessageBox.Show(message,"提示信息

",MessageBoxButtons.YesNoCancel,https://www.360docs.net/doc/6d183289.html,rmation);

44.}

45.///

///显示一个YesNo选择对话框

46.///

///对话框的选择内容提示信息

///如果选择Yes则返回true,否则返回false

47.public static bool ConfirmYesNo(string prompt)

48.{

49.return MessageBox.Show(prompt,"确认

",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes;

50.}

51.///

///显示一个YesNoCancel选择对话框

52.///

///对话框的选择内容提示信息

///返回选择结果的的DialogResult值

53.public static DialogResult ConfirmYesNoCancel(string prompt)

54.{

55.return MessageBox.Show(prompt,"确认

",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Question);

56.}

57.}

2)DotNetBar样式中对话框处理封装类如下所示

1.public class MessageExUtil

2.{

3.///

///显示一般的提示信息

4.///

///提示信息

5.public static DialogResult ShowTips(string message)

6.{

7.return MessageBoxEx.Show(message,"提示信息

",MessageBoxButtons.OK,https://www.360docs.net/doc/6d183289.html,rmation);

8.}

9.///

///显示警告信息

10.///

///警告信息

11.public static DialogResult ShowWarning(string message)

12.{

13.return MessageBoxEx.Show(message,"警告信息

",MessageBoxButtons.OK,MessageBoxIcon.Warning);

14.}

15.///

///显示错误信息

16.///

///错误信息

17.public static DialogResult ShowError(string message)

18.{

19.return MessageBoxEx.Show(message,"错误信息

",MessageBoxButtons.OK,MessageBoxIcon.Error);

20.}

21.///

///显示询问用户信息,并显示错误标志

22.///

///错误信息

23.public static DialogResult ShowYesNoAndError(string message)

24.{

25.return MessageBoxEx.Show(message,"错误信息

",MessageBoxButtons.YesNo,MessageBoxIcon.Error);

26.}

27.///

///显示询问用户信息,并显示提示标志

28.///

///错误信息

29.public static DialogResult ShowYesNoAndTips(string message)

30.{

31.return MessageBoxEx.Show(message,"提示信息

",MessageBoxButtons.YesNo,https://www.360docs.net/doc/6d183289.html,rmation);

32.}

33.///

///显示询问用户信息,并显示警告标志

34.///

///警告信息

35.public static DialogResult ShowYesNoAndWarning(string message)

36.{

37.return MessageBoxEx.Show(message,"警告信息

",MessageBoxButtons.YesNo,MessageBoxIcon.Warning);

38.}

39.///

///显示询问用户信息,并显示提示标志

40.///

///错误信息

41.public static DialogResult ShowYesNoCancelAndTips(string message)

42.{

43.return MessageBoxEx.Show(message,"提示信息

",MessageBoxButtons.YesNoCancel,https://www.360docs.net/doc/6d183289.html,rmation);

44.}

45.}

3)DevExpress样式中对话框处理封装类如下所示

1.public class MessageDxUtil

2.{

3.///

///显示一般的提示信息

4.///

///提示信息

5.public static DialogResult ShowTips(string message)

6.{

7.return DevExpress.XtraEditors.XtraMessageBox.Show(message,"提示信息

",MessageBoxButtons.OK,https://www.360docs.net/doc/6d183289.html,rmation);

8.}

9.///

///显示警告信息

10.///

///警告信息

11.public static DialogResult ShowWarning(string message)

12.{

13.return DevExpress.XtraEditors.XtraMessageBox.Show(message,"警告信息

",MessageBoxButtons.OK,MessageBoxIcon.Warning);

14.}

15.///

///显示错误信息

16.///

///错误信息

17.public static DialogResult ShowError(string message)

18.{

19.return DevExpress.XtraEditors.XtraMessageBox.Show(message,"错误信息

",MessageBoxButtons.OK,MessageBoxIcon.Error);

20.}

21.///

///显示询问用户信息,并显示错误标志

22.///

///错误信息

23.public static DialogResult ShowYesNoAndError(string message)

24.{

25.return DevExpress.XtraEditors.XtraMessageBox.Show(message,"错误信息

",MessageBoxButtons.YesNo,MessageBoxIcon.Error);

26.}

27.///

///显示询问用户信息,并显示提示标志

28.///

///错误信息

29.public static DialogResult ShowYesNoAndTips(string message)

30.{

31.return DevExpress.XtraEditors.XtraMessageBox.Show(message,"提示信息

",MessageBoxButtons.YesNo,https://www.360docs.net/doc/6d183289.html,rmation);

32.}

33.///

///显示询问用户信息,并显示警告标志

34.///

///警告信息

35.public static DialogResult ShowYesNoAndWarning(string message)

36.{

37.return DevExpress.XtraEditors.XtraMessageBox.Show(message,"警告信息

",MessageBoxButtons.YesNo,MessageBoxIcon.Warning);

38.}

39.///

///显示询问用户信息,并显示提示标志

40.///

///错误信息

41.public static DialogResult ShowYesNoCancelAndTips(string message)

42.{

43.return DevExpress.XtraEditors.XtraMessageBox.Show(message,"提示信息

",MessageBoxButtons.YesNoCancel,https://www.360docs.net/doc/6d183289.html,rmation);

44.}

45.}

三个不同的对话框封装类,专门为不同的Winform界面样式服务,接口一样,返回的对话框结果一样,简化了对这些常用的操作封装的同时,也使得界面的整体性达到更一致,用户体验更好,否则在漂亮的DevExpress界面效果中,突然弹出一个灰头土脸的对话框提示信息,甚是大煞风景,给使用者不好的印象。

以上是我在我的三种界面样式的Winform开发框架中常用到的类,希望对大家有所帮助,并能在具体的项目中应用,有时间就推荐一下,在此感谢大家支持。

详解WinForm窗体间交互的方法

本文将为大家介绍的是WinForm窗体之间的数据交互等问题,包括自定义一个构造函数等等问题

实际上过去我也写过类似的主题,这里把各种方法总结一下,内容的确基础了一些,所以这篇文章是写给刚刚学习C#的同行们的,希望对大家有些帮助吧!很抱歉,这篇文章没有诡异的bug来勾起大家的兴趣,但是下篇文章我会努力写些有趣的主题的

在窗体间传递数据的方法比较多:

1,在子窗体中自定义一个构造函数,参数类型是主窗体,当要显示子窗体的时候,就用这个构造函数来实例化子窗体,然后把this指针传进去,说起来太抽象了,我大概一写大家应该就明白了:

1.public class frmMain:Form

2.{

3....

4.frmControl controlForm=new frmControl(this);

5.controlForm.Show();

6.}

7.public class frmControl:Form//子窗体,用来控制主窗体的某些显示!

8.{

9.private frmMain mainForm;

10.public frmControl(frmMain mainForm)

11.{

12.this.mainForm=mainForm;

13.}

14.private void button1_Click(object sender,EventArgs e)

15.{

16.frmMain.textBox1.Text=this.textBox1.Text;//把子窗体的文本框值传递给主窗体的文本

框!

17.}

18.}

2,我个人感觉上面的方法不是很好,虽然实现起来很简单,只是想改变窗体的标题文本,就把整个主窗体的引用都传递给子窗体,这样的方式不是很幽雅,我们用接口来改进上面的方法,这样可以限制暴露给子窗体的功能,降低窗体之间的耦合度:

1.public interface IChangeTitle:

2.{

3.void ChangeTitle(string title);

4.}

5.public class frmMain:Form,IChangeTitle

6.{

7....

8.frmControl controlForm=new frmControl(this);

9.controlForm.Show();

10.public void ChangeTitle(string title)

11.{

12.this.Text=title;

13.}

14.}

15.public class frmControl:Form//子窗体,用来控制主窗体的某些显示!

16.{

17.private IChangeTitle ichangeTitle;

18.public frmControl(IChangeTitle ichangeTitle)

19.{

20.this.ichangeTitle=ichangeTitle;

21.}

22.private void button1_Click(object sender,EventArgs e)

23.{

24.ichangeTitle.ChangeTitle(this.textBox1.Text);//通过接口来调用方法

25.

26.}

27.

28.}

3,为了进一步降低窗体之间的耦合度,我们可以用委托来实现这个需求:

1.public partial class ChildForm:Form

2.{

3.public delegate void TitleChangedHandler(string title);

4.public TitleChangedEventHandler TitleChanged;

5.public ChildForm()

6.{

7.InitializeComponent();

8.}

9.

10.

11.private void btn_Ok_Click(object sender,EventArgs e)

12.{

13.if(TitleChanged!=null)

14.TitleChanged("Test Title");//委托调用

15.

16.}

17.}

主窗体给委托变量赋值就可以了:

1.public partial class MainForm:Form

2.{

3.private ChildForm loginForm=new ChildForm();

4.public MainForm()

5.{

6.InitializeComponent();

7.loginForm.TitleChanged=new ChildForm.TitleChangedEventHandler(FormTitleCha

nged);

8.}

9.

10.protected void FormTitleChanged(string title)

11.{

12.this.Text=title;

13.}

14.

15.private void button1_Click(object sender,EventArgs e)

16.{

17.loginForm.Show();

18.}

19.}

4,也可以在子窗体中定义一个自定义的事件,然后自定义一个事件参数,用来传递你想传递的一些信息:

1.public partial class ChildForm:Form

2.{

3.public class TitleChangedEventArgs:EventArgs//事件参数类

4.{

5.private string title="";

6.public string Title

7.{

8.get

9.{

10.return title;

11.}

12.set

13.{

14.title=value;

15.}

16.}

17.}

18.public delegate void TitleChangedEventHandler(object sender,TitleChangedEve

ntArgs e);

19.public event TitleChangedEventHandler TitleChanged;

20.public ChildForm()

21.{

22.InitializeComponent();

23.}

24.

25.

26.private void btn_Ok_Click(object sender,EventArgs e)

27.{

28.TitleChangedEventArgs e1=new TitleChangedEventArgs();

29.e1.Title="Login sucessed";

30.OnTitleChanged(e1);//触发事件

31.

32.}

33.protected virtual void OnTitleChanged(TitleChangedEventArgs e)//触发事件的

方法

34.{

35.if(TitleChanged!=null)

36.TitleChanged(this,e);

37.}

38.}

主窗体订阅这个事件就可以了:

1.public partial class MainForm:Form

2.{

3.private ChildForm loginForm=new ChildForm();

4.public MainForm()

5.{

6.InitializeComponent();

7.loginForm.TitleChanged+=new ChildForm.TitleChangedEventHandler(FormTitleCh

anged);

8.}

9.

10.protected void FormTitleChanged(object sender,ChildForm.TitleChangedEventA

rgs e)

11.{

12.this.Text=e.Title;

13.}

14.

15.private void button1_Click(object sender,EventArgs e)

16.{

17.loginForm.Show();

18.}

19.}

探讨WPF开发工作站相关知识

WPF开发工作站的创建是一个非常基础的知识点。我们可以通过这篇文章介绍的内容详细的掌握这一创建爱你技巧,提高编程效率。

WPF的出现解决了大多数开发人员在实际开发中关于图形界面的一些局限性。你已经确信WPF是下一代应用程序的战略级技术,你已打算利用这个机会好好规划并重新安装你的开发工作站。

?WPF Dispatcher在界面操作中作用体现

?WPF路径描述方式解析

?探讨WPF按钮实现特殊效果

?在开发应用中WPF优点的体现

?WPF支持国际化实现方式解析

那么你应该在这个工作站上放些什么,才可以创建一个完美的WPF开发环境呢?有许多出色的工具和例子,我认为我应该把它们汇总到一个清单中从而使大家从中受益。我也想听听你们的意见,如果我有漏掉的东西请告诉我,我会不断地更新这份帖子。

WPF开发工作站基本环境

Windows Vista,当然需要!(虽然在Windows XP SP2上也会工作得很好)

Visual Studio2005(带SP1和Windows Vista支持文件)

Visual Studio2005Extensions https://www.360docs.net/doc/6d183289.html, Framework3.0

Windows SDK

Expression Blend与Expression Design

WPF开发工作站工具

XamlPadX,Kaxaml与XamlCruncher::用来替代XamlPad工具的三个增强性工具,它们是在Windows SDK中的。每一个工具都有它的强项:XamlPadX拥有很多出色的插件,它是基于XamlPad代码写出来的;Kaxaml用于演示很不错,对间距和tab支持很好;XamlCruncher有一段高质量的可用源代码。

Lutz Roeder''https://www.360docs.net/doc/6d183289.html, 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;)

ZAM3D:Electric Rain的工具,用于快速创建3D网格,并让3D网格动起来

XAML Converters:将3DS,DXF,Blender,Fireworks,Lightwave,SWF,Maya及Illustrator的文章转换为XAML格式的工具

WPF开发工作站创建一个代码工具箱

3D Tools for WPF:3D表面的交互式2D、物体边框线、3D鼠标导航;

Kevin''s Bag-o-Tricks:控件集合,扩展并增强一些WPF自带的类型,如ColorPicker、FolderPicker、NumericUpDown、RadioButtonList、数据控件、动画版tile panel和图形控件

UI Automation Stress:应用程序环境压力测试。将这个代码加入Debug菜单,这样可以保证你不会因为错误输入而让你的应用程序崩溃。

WPF开发工作站示例应用程序

我是那种喜欢有许多示例代码的程序员,这样我就可以从中拷贝概念、想法和技术。拷贝以下这些示例示例到\samples 目录中:

Patient Monitoring Sample

Woodgrove Finance Sample

Thailand Sample

也请把%SdkTools%\..\Samples\WPFSamples.zip解压到\samples\sdk目录中,这样你可以很方便地浏览所有的例子而不用去看SDK文档接口。

现在启用Windows Desktop Search(点这里安装WDS3.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 Studio2005,这样只需要从代码视图中按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或Office2007中的,或者你可以从这里下载该字体。

在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.public sealed class Dispatcher

2.{

3.[SecurityCritical,

UIPermission(SecurityAction.

LinkDemand,Unrestricted=true)]

4.public static void Run()

5.{

6.PushFrame(new DispatcherFrame());

7.}

8.}

DispatcherFrame可以嵌套,并通过检查Continue属性来决定循环是否继续。我们可以通过调用

Dispatcher.ExitAllFrames()来终止所有的帧循环,当然这种编程方式并不可取,可能会造成一些意外出现。

与WPF Dispatcher调度对象想对应的就是DispatcherObject,在WPF中绝大部分控件都继承自DispatcherObject,甚至包括Application。这些继承自DispatcherObject的对象具有线程关联特征,也就意味着只有创建这些对象实例,且包含了Dispatcher的线程(通常指默认UI线程)才能直接对其进行更新操作。

当我们尝试从一个非UI线程更新一个标签,会看到一个如下的异常。

1.private void button1_Click

(object sender,RoutedEventArgs e)

2.{

3.new Thread(()=>https://www.360docs.net/doc/6d183289.html,bel1.

Content=DateTime.Now.

ToString()).Start();

4.}

按照DispatcherObject的限制原则,我们改用Window.Dispatcher.Invoke()即可顺利完成这个更新操作。

1.private void button1_Click

(object sender,Routed

EventArgs e)

2.{

3.new Thread(()=>

4.{

5.this.Dispatcher.Invoke

(DispatcherPriority.Normal,

6.new Action(()=>this.

label1.Content=DateTime.

Now.ToString()));

7.}).Start();

8.}

如果在其他项目(比如类库)中,我们可以用Application.Current.Dispatcher.Invoke(...)完成同样的操作,它们都指向UI Thread Dispatcher这个唯一对象。

WPF Dispatcher还提供了BeginInvoke这个异步版本。

1.private void button1_Click(object

sender,RoutedEventArgs e)

2.{

3.new Thread(()=>

4.{

5.Application.Current.Dispatcher.

BeginInvoke(DispatcherPriority.Normal,

6.new Action(()=>

7.{

8.Thread.Sleep(3000);

https://www.360docs.net/doc/6d183289.html,bel1.Content=

DateTime.Now.ToString();

10.}));

11.MessageBox.Show("Hi!");

12.}).Start();

13.}

凡事都有例外,WPF还提供了一种继承自Freezable的类型,尽管Freezable也间接继承自DispatcherObject,但当诸如WPF Dispatcher这类对象从修改状态变成冻结状态时,它即变成自由线程对象,不在具有线程关联。

在开发应用中WPF优点的体现

WPF优点包括:拥有让控件更灵活的Data Template;具有比Windows Forms更强的Binding;可以让排版更灵活的各种Layout控件等。

WPF为什么会被开发人员如此重视,在开发过程中又为何会占据着重要的地位呢?这就要先从WPF优点来分析。我们将会为大家总结出几个WPF优点方便大家理解。

?WPF URI总结概览

?WPF Application性能讲解

?WPF Dispatcher在界面操作中作用体现

?WPF路径描述方式解析

?探讨WPF按钮实现特殊效果

WPF优点之让控件更灵活的Data Template

C#代码

1.GridViewColumn gvcName=

new GridViewColumn();

2.gvcName.Header="Name";

3.DataTemplate nameTemplate=

new DataTemplate();

4.FrameworkElementFactory

nameFactory=new Framework

ElementFactory(typeof(Contact

PropertyLabel));

5.Binding binding=new

Binding("Name");

6.binding.Mode=BindingMode.TwoWay;

https://www.360docs.net/doc/6d183289.html,Factory.SetBinding

(ContentProperty,binding);

https://www.360docs.net/doc/6d183289.html,Template.VisualTree=

nameFactory;

9.gvcName.CellTemplate=

nameTemplate;

10.gvContactList.Columns.Add(gvcName);

11.GridViewColumn gvcName=

new GridViewColumn();

12.gvcName.Header="Name";

13.DataTemplate nameTemplate=

new DataTemplate();

14.FrameworkElementFactory nameFactory=

new FrameworkElementFactory

(typeof(ContactPropertyLabel));

15.Binding binding=new Binding("Name");

16.binding.Mode=BindingMode.TwoWay;

https://www.360docs.net/doc/6d183289.html,Factory.SetBinding

(ContentProperty,binding);

https://www.360docs.net/doc/6d183289.html,Template.VisualTree=nameFactory;

19.gvcName.CellTemplate=nameTemplate;

20.gvContactList.Columns.Add(gvcName);

这段代码可以给一个ListView的一列做双向绑定,并且指定这一行的渲染控件。WPF优点之比Windows Forms更强的Binding

C#代码

1.public class Contact:

DependencyObject

2.{

3.public static DependencyProperty

NameProperty=DependencyProperty.

Register("Name",typeof(string),

typeof(Contact));

4.public string Name

5.{

6.get{return(string)GetValue

(NameProperty);}

7.set{SetValue(NameProperty,value);}

8.}

9.}

10.public class Contact:DependencyObject

11.{

12.public static DependencyProperty

NameProperty=DependencyProperty.

Register("Name",typeof(string),

typeof(Contact));

13.public string Name

14.{

15.get{return(string)GetValue

(NameProperty);}

16.set{SetValue(NameProperty,

value);}

17.}

18.}

DependencyObject+DependencyProperty使得属性设置可以自动触发ValueChanged事件,从而让Binding进行更新。

WPF优点之让排版更灵活的各种Layout控件

对于普通界面的排版,用Grid+Border

对于要动态添加删除的界面排版,在需要动态增删的位置使用StackPanel

WPF Listbox生成方式介绍

WPF Listbox控件的使用在我们实际的开发程序中是一个非常重要的操作。对于初学者来说,我们需要牢固的掌握这些基础知识。

在WPF中,有很多常用的控件可以帮助我们在实际编程中轻松的完成各种图形界面的相关需求。在这些控件中,有一个叫做WPF Listbox的控件,里面的Item是通过数据模板生成的。

?WPF边框不同形式的设置技巧

?WPF文字布局相关概念解析

?WPF Canvas实现绝对定位

?WPF布局属性相关方式讲解

?WPF附加属性相关用途介绍

WPF Listbox代码示例如下所示:

1.

BorderBrush="Aqua"BorderThickness="2"

Padding="8"CornerRadius="5">

2.

3.

ItemTemplate="{StaticResource

myDataTemplate}"

4.IsSynchronizedWithCurrentItem="True">

5.

6.

7.

8.

9.

11.

12.Listbox使用的数据模板如下:

13.

FontSize="14">

14.

15.

16.

17.

18.

使用下面的WPF Listbox代码就可以获取数据模板里面TextBlock中的内容了。

1.ListBoxItem myListBoxItem=

(ListBoxItem)(myListBox.Item

ContainerGenerator.Container

FromItem(myListBox.Items.CurrentItem));

2.ContentPresenter myContent

Presenter=FindVisualChild

(myListBoxItem);

3.DataTemplate myDataTemplate

=myContentPresenter.ContentTemplate;

4.TextBlock myTextBlock=

(TextBlock)myDataTemplate.

FindName("textBlock",myContent

Presenter);

5.MessageBox.Show("The text of

the named TextBlock in the

C# WinForm自定义控件开发实例

C# WinForm自定义控件开发实例 最近做一个图象的采集,需要一个图形的选择控件,但是在.net下没有类似vb中的shape控件,所以考虑了自己写一个控件。下面我将从头创建控件,这个控件主要是用来选择图形的Rectangle,有一下几个属性Color BorderColor:边框颜色,Color BackColor:背景颜色,bool ReSizeble:是否可移动,Rectangle SelectRectangle:选择区域。 打开vs2003(我用的这个版本),新建一个c#控件库,ok,拷贝如下代码到你的代码里。using System;using System.Collections;using https://www.360docs.net/doc/6d183289.html,ponentModel;using System.Drawing;using System.Data;using System.Windows.Forms;namespace WindowsExtendedControls{ /// /// 控件/// public class ShapeEx : System.Windows.Forms.Control { /// /// 必需的设计器变量。/// /// private Color _BorderColor=new Color(); private Color _BackColor=new Color(); private bool _ReSizeble; private Point _SelfLocation=new Point(); private Point _MouseLocation=new Point(); private int _SelfWidth; private int _SelfHeight; private int _SelectSelctedIndex;//0-8,0:SizeAll private Rectangle

《.NET-WinForm编程》课程设计-模板

《.NET WinForm编程》课程设计题目:智能QA系统的设计与实现 学院/ 系软件学院 专业信息管理与信息系统专业(日英强化)年级 2009级 学号 00988**** 作者姓名 **** 2012年 7月 5日

本次课程设计题目为智能QA系统的设计与实现,首先介绍了QA技术的现状,然后提出一个基于QA的数字信息化领域的架构,并对相关关键技术进行了讨论,最后说明了QA在数字信息化领域的应用前景。 本系统由三个模块组成,QA管理模块、答案管理模块和信息查询模块。QA管理模块包括信息的新增,修改,删除。答案管理模块实现了答案的基本操作,信息查询模块要求在输入查询条件后,会根据一定的逻辑输出答案。由于各模块的分开及进入系统前验证用户身份,也加强了各种信息的安全性及保密性。 根据系统所需功能,决定以Windows XP为开发平台,采用SQL Server 2005做后台数据库,选择功能强大的Visual Studio 2008为开发工具,利用软件工程思想和方法,总体上用结构化生命周期法进行系统分析和设计,采用快速原型法来实现,系统本系统界面友好,与目前市场上的主流游戏软件大体一致,而且操作更加简单,使用方式和微软各种软件(Windows、Office)基本相同,减少了用户学习、使用本游戏系统的额外负担。本文通过系统概述、系统分析、系统设计、系统实施、开发总结五章,详细的说明了系统的开发过程,最后并对整个开发过程进行了总结。 该系统使用了功能强大的.NET WinForm开发技术,使用了基于MVC机制的三层架构。操作方便,可维护性强。经过大量的测试,基本符合用户需求。 关键字:智能OA;信息查询;三层架构;C#

实验1:WinForm程序设计

实验一:WinForm程序设计 实验名称:WINFORM程序设计学时安排: 2课时实验类别:验证型、设计型实验要求:1人1组 一、实验目的和任务 1.掌握创建WinForms应用程序的步骤 2.熟悉WinForms应用程序的控件 二、注意事项和要求 1.第一部分必须要完成,第二部分尽量完成,第三部分供有余力的同学完成; 2.完成后上传项目压缩文件到ftp服务器指定目录,压缩文件名称:学号(后两位)-姓名。 三、实验内容和步骤 1.第一部分:跟着老师练习 1)创建一个名为AppSum的WinForms应用程序,要求用户在文本框中输入2个数字, 然后求2数之和。效果如下图所示: 2.第二部分:自己思考练习 1)创建一个Windows窗体应用程序,允许用户从给定的颜色和字体列表中选择颜色、字 体等设置。用户还可以通过将标准颜色用作基本颜色来创建自定义颜色,并使用滚动 条来增大/减小红色、蓝色和绿色的渐变。选定的颜色应适用于窗体界面。选定的字体 中应显示一个文本示例。效果如下图所示:

2)具体步骤: 新建一个名为AppSettings的Winforms应用程序项目,并将主窗体重命名为FrmSettings。 拖动一个TabControl控件到窗体上,name属性改为tagSettings;选择tagSettings 控件的TabPages属性并单击右边的“…”按钮;出现“TabPage集合编辑器”对 话框。添加两个选项卡页,并将其分别命名为tabColor和tabFont,对应的Text 属性设置为“颜色”和“字体”。 拖动工具箱中的控件来设计窗体,颜色标签页对应的窗体如下:

WinForm控件开发基础教程四控件属性

WinForm控件开发基础教程四控件属性 前一篇文章介绍了常用的设计时Attribute。其中BrowsableAttribute,CategoryAttribute,DescriptionAttribute,DefaultPropertyAttribute,DefaultEventAttribute都是比较简单的,也是可有可无,但是为了提供更好的用户体验这些Attribute最好不要省掉,如果你对这些Attribute还不熟悉,可以参考我前一篇文章的描述或者查看MSDN,这里我就不在赘述了。下来我们主要介绍一下DesignerSerializationVisibilityAttribute和TypeConverterAttribute。 DesignerSerializationVisibilityAttribute的功能是指示一个属性是否串行化和如何串行化,它的值是一个枚举,一共有三种类型Content,Hidden,Visible。Content指示代码生成器为对象包含的内容生成代码,而不是为对象本身,Hidden指示代码生成器不为对象生成代码,visible指示代码生成器为对象生成代码。假如你的控件有一个集合属性,又想在设计时自动将集合属性的内容生成代码,那么就使用这个Attribute,并将值设为DesignerSerializationVisibility.Content。 TypeConverterAttribute的作用就更大一些,也稍微复杂一些。TypeConverterAttribute主要的目的是为属性指定一个类型转换器,这个转化器可以将属性的值转换城其它的类型。.NET 框架已经为大部分常用的类型都提供了类型转换器,比如Color就有ColorConverter,枚举类型就有EnumConverter,等等,所以一般情况下你没有必要写类型转换器,如果你的属性的特殊的类型或者自定义的类型那么就必须要写了。类型转换器都是从https://www.360docs.net/doc/6d183289.html,ponentModel.TypeConverter派生出来的,你需要重写其中的一些方法来达到转换的目的,在我们开发的过程中,其实只关心属性的值如何转换成字符串(因为属性的值需要在属性浏览器里显示出来,属性浏览器里显示的都是字符串)和源代码(需要自动为属性的值生成源代码以实现持久化),当然反过来,也要将字符串和源代码转换成属性的值。另外使用TypeConverter也可以实现子属性,让属性的子属性也显示在属性浏览器里,并且可以折叠。 接下来我就写一个简单的控件来演示一下这个控件。代码如下: using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Drawing; using https://www.360docs.net/doc/6d183289.html,ponentModel; using System.Collections; namespace CustomControlSample { public class MyListControl:System.Windows.Forms.Control { private List_list=new List(); public MyListControl()

C# WinForm窗体及其控件的自适应

C# WinForm窗体及其控件的自适应 C# WinForm窗体及其控件自适应各种屏幕分辨率 一。说明 我们自己编写程序的界面,会遇到各种屏幕分辨率,只有自适应才能显的美观。实际上,做到这点也很简单,就是首先记录窗体和它上面控件的初始位置和大小,当窗体改变比例时,其控件的位置和大小也按此比例变化即可。因为窗体上控件的位置和大小是相对于自己所在的窗体的,也就是所谓的窗口坐标。 在这里我们只考虑相对于自己窗体的窗口坐标更简单,也就是成比例变化。为了多个窗体共用,我在这里创建一个类AutoSizeFormClass ,1.使用它去记录窗体和其控件的初始位置和大小,2.根据窗体变化了的大小,成比例地实现其控件的水平和垂直方向的变化,也就是自适应。 二。使用方法 使用方法很简单, 1.把自适应的类整体复制到你的工程命名空间里, 然后在需要自适应的窗体中做3步即可: 2.声明自适应类实例。 3.为窗体添加Load事件,并在其方法Form1_Load中,调用类的初始化方法,记录窗体和其控件初始位置和大小 4.为窗体添加SizeChanged事件,并在其方法Form1_SizeChanged中,调用类的自适应方法,完成自适应 三。完整代码如下: (一)。自适应窗体的代码: using System; using System.Collections.Generic;

using https://www.360docs.net/doc/6d183289.html,ponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsApplication1 { public partial class Form1 : Form { //1.声明自适应类实例 AutoSizeFormClass asc = new AutoSizeFormClass(); public Form1() { InitializeComponent(); } //2. 为窗体添加Load事件,并在其方法Form1_Load中,调用类的初始化方法,记录窗体和其控件的初始位置和大小 private void Form1_Load(object sender, EventArgs e) { asc.controllInitializeSize(this); } //3.为窗体添加SizeChanged事件,并在其方法Form1_SizeChanged中,调用类的自适应方法,完成自适应 private void Form1_SizeChanged(object sender, EventArgs e) { asc.controlAutoSize(this); } } }

WinForm界面布局

WinForm界面布局 Dock&Anchor Dock和Anchor是水火不容的,同时给控件设置Dock和Anchor属性时后设置的会覆盖前面的设置。 Dock 我初接触WinForm的时候发现控件的Width和Height只能是int,不能设置为百分比,那个时候就想子控件如何跟着父控件而变化呢?父控件变大就变大,而且还填满那个区域。甚至以为这个需要通过代码来解决,如是在SizeChanged事件里…… 后来才发现我要的就是Dock给的,Dock是停靠的意思。Dock属性的类型是DockStyle枚举: 1:public enum DockStyle 2:{ 3:None=0, 4:Top=1, 5:Bottom=2, 6:Left=3, 7:Right=4, 8:Fill=5 9:} 默认是None,当为Left的时,就表示子控件停靠在父控件的左边区域,并把左区域填充满: 上图中的Panel总是会停靠在Form的左边区域,不管如何调整Form的高度,它总是能把左边区域填满。Dock麻烦的地方在于多个控件碰到一起时,比如有两个Panel都设置为Left 该怎么办?我们会发现向父控件的Controls集合中添加子控件,越晚添加具有更高的“优先级”(不知道有没有这个说法,这是我杜撰的)。这里的优先级指的是,子控件“优先级”越高,

越靠近父控件边缘,其他子控件就得避让: [我的见解;通过选中控件,一般是pannel,右键选择置为底层,来决定控件间的优先级] this.Controls.Add(this.panel1); this.Controls.Add(this.panel2); Panel2后添加进去,所以它具有更高的优先级,更靠近Form的边缘。这个规则不仅仅对于Dock都设为Left的有效,对Dock属性不同,但是碰到一起的子控件也适用: 1:this.panel1.Dock=DockStyle.Left; 2:this.panel2.Dock=DockStyle.Left; 3:this.panel3.Dock=DockStyle.Top; 4: 5:this.Controls.Add(this.panel1); 6:this.Controls.Add(this.panel2); 7:this.Controls.Add(this.panel3); panel3的Dock设置为Top,最后添加到Controls集合中,所以具有最高的优先级,其他两个panel都得避让:

winform窗体和控件自适应

有时winform窗体的大小会改变,此时窗体上的控件会很混乱,如何可以使控件自适应窗体呢?以 下就是方法: 1、首先在自己的命名空间里先建一个Autosize.cs类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; namespace 自己的命名空间 { class Autosize { public void setTag(Control cons) { foreach (Control con in cons.Controls) { con.Tag = con.Width + ":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size; if (con.Controls.Count > 0) setTag(con); } } string[] mytag; public void setControls(float newx, float newy, Control cons) { foreach (Control con in cons.Controls) { if (con.Tag != null) { mytag = con.Tag.ToString().Split(new char[] { ':' }); float a = Convert.ToSingle(mytag[0]) * newx; con.Width = (int)a; a = Convert.ToSingle(mytag[1]) * newy; con.Height = (int)(a); a = Convert.ToSingle(mytag[2]) * newx; con.Left = (int)(a); a = Convert.ToSingle(mytag[3]) * newy; con.Top = (int)(a); Single currentSize = Convert.ToSingle(mytag[4]) * Math.Min(newx, newy); }

如何在WPF中使用Windows Form控件

如何在WPF中使用Windows Form控件 由于WPF中没有没有DateTimePicker控件,网上有人写的又不太好用,而在WinForm中有此控件,因此想到了从.net中借用此控件。 首先,我们需要向项目中的引用(reference)中添加两个动态库dll,一个是.NET库中的System.Windows.Forms,另外一个是WindowsFormsIntegration。组件不好找,排一下序就比较容易了。

添加完两个动态dll以后,就可以在控件库中找到WindowsFormsHost这个控件了。这个控件是我们添加Windows Form控件的基础。跟别的其他的控件一样,它也是可控的,可以自定义它在窗口中的位置、控件大小颜色等属性。 将这个控件放入窗体,放置完以后在xmal代码中会自动生成相应代码: 然后,需要在xmal的开始处添加两行代码 xmlns:WinFormHost="clr-namespace:System.Windows.Forms.Integration;assembly=W indowsFormsIntegration" xmlns:WinFormControls="clr-namespace:System.Windows.Forms;assembly=System.Wi ndows.Forms"

winform界面设计规范

winform界面设计规范 Winform开发一般遵循的原则 窗体类 型 ..................................................................... .............. 2 尺寸比 例 ..................................................................... .............. 3 窗体控件元 素 ..................................................................... ..... 3 Tab键次 序 ..................................................................... ........... 5 快捷 键 ..................................................................... ................... 5 右键菜 单 ..................................................................... .............. 5 区域排 列 ..................................................................... .............. 6 UI开发异常处理..................................................................... 6 执行动作要提 示 ..................................................................... 7 文字表 达 .....................................................................

Winform常用控件

1.数据显示:DataGridView(DataGridView 控件提供用来显示数据的可自定义表。使用 DataGridView 类,可以自定义单元格、行、列和边框)。 文本编辑:TextBox(显示设计时输入的文本,它可由用户在运行时编辑或以编程方式更改)。 RichTextBox(使文本能够以纯文本或 RTF 格式显示)。MaskedTextBox(约束用户输入的格式)。 2.信息显示:Label(显示用户无法直接编辑的文本)。LinkLabel(将文本显示为 Web 样式的链接,并在用户单击该特殊文本时触发事件。该文本通常是到另一个窗口或网站的链接)。 StatusStrip(通常在父窗体的底部使用有框架的区域显示有关应用程序的当前状态的信息)。ProgressBar(向用户显示操作的当前进度)。 3.从列表中选择:CheckedListBox(显示一个可滚动的项列表,每项旁边都有一个复选框)。 ComboBox(显示一个下拉式项列表)。DomainUpDown(显示用户可用向上和向下按钮滚动的文本项列表)。ListBox(显示一个文本项和图形项(图标)列表)。ListView(在四个不同视图之一中显示项。这些视图包括纯文本视图、带有小图标的文本视图、带有大图标的文本视图和详细信息视图)。NumericUpDown(显示用户可用向上和向下按钮滚动的数字列表)。TreeView (显示一个节点对象的分层集合,这些节点对象由带有可选复选框或图标的文本组成)。 4.图形显示:PictureBox(在一个框架中显示图形文件(如位图和图标)。 5.图形存储:ImageList(充当图像储存库。ImageList 控件和及其包含的图像可以在不同的应用程序中重用)。 6.值的设置:CheckBox(显示一个复选框和一个文本标签。通常用来设置选项)。CheckedListBox(显示一个可滚动的项列表,每项旁边都有一个复选框)。RadioButton(显示一个可打开或关闭的按钮)。TrackBar(允许用户通过沿标尺移动“滚动块”来设置标尺上的值)。 7.数据的设置:DateTimePicker(显示一个图形日历以允许用户选择日期或时间)。MonthCalendar(显示一个图形日历以允许用户选择日期范围)。 8.对话框:ColorDialog(显示允许用户设置界面元素的颜色的颜色选择器对话框) ColorDialog 显示允许用户设置界面元素的颜色的颜色选择器对话框。 FontDialog 显示允许用户设置字体及其属性的对话框。 OpenFileDialog 显示允许用户定位文件和选择文件的对话框。 PrintDialog 显示允许用户选择打印机并设置其属性的对话框。 PrintPreviewDialog 显示一个对话框,该对话框显示 PrintDocument 组件在打印出来后的外观。 FolderBrowserDialog 显示用来浏览、创建以及最终选择文件夹的对话框SaveFileDialog 显示允许用户保存文件的对话框。 9.菜单控件: MenuStrip 创建自定义菜单 ContextMenuStrip Bitmap 创建自定义上下文菜单。 10.命令: Button Bitmap 启动、停止或中断进程。 LinkLabel 将文本显示为 Web 样式的链接,并在用户单击该特殊文本时触发事件。该文本通常是到另一个窗口或网站的链接。 NotifyIcon 在表示正在后台运行的应用程序的任务栏的状态通知区域中显示一个图标。

C#登录界面设计教案

课题:登录界面窗体设计 一、教材分析 《C#程序设计基础教程》第六章的form2登录界面窗体设计里,介绍了登录界面的制作过程。本课强调学生对于C#语言的理解能力以及窗体设计的实际操作能力。按照新课改的教学理念,要注意培养学生的信息素养,培养学生不断探索新知识的能力,所以本课重在培养学生通过已有知识的掌握,自己主动去解决新的问题,只有具备这种能力,才能不断的去探究去创新。在内容上,本课是把前面学习C#程序设计语言实际运用到窗体的触发事件的代码设计中,是对前面所学语言的灵活运用,是前面知识的拓展和延伸;同时对于窗体的各个控件的学习,也为下面更复杂的窗体设计作了一个很好的铺垫,起到承上启下的作用。 二、学情分析 本课的授课对象是五年制大专电子商务专业四年级的学生,他们已经具备了一定的信息素养和动手能力,本学期学生同时还上了另外一门网页制作的课程,网页制作里涉及到一些控件的使用跟本课知识点有些类似,所以学生已经掌握了一些控件的使用方法以及属性的设置方法,对于窗体的简单设计已经有一定基础。但是作为非计算机专业学生,对于控件的触发事件的代码编写还是有不少困难的,所以本课降低难度,学生只要理解相关代码,并进行运用即可,不要求学生一定要自己编写代码,学有余力的同学可以尝试独立编写代码,所以可以进行分层教学,体现了新课标里的让所有的学生都参与到学习中来! 三、教学目标 1、知识与技能 a.掌握Form窗体、Button按钮、Text文本框和Label标签的创建和设置方法以及它们 相关属性的设置方法。 b.掌握Button按钮的Click单击事件的触发方式,并能够理解相关触发事件的代码设计。 c.初步掌握利用各类窗控件制作出简单的窗体设计作品。 2、过程与方法 a.通过教师的知识点讲解以及学生的自主探究和合作学习,使学生掌握新的知识点。 b.通过学生亲手动手实践,自主探索,使学生基本掌握简单窗体设计的方法。 c.采用任务驱动、自主学习、探究学习、合作学习等教学方法,让学生观察、思考、交 流,培养学生自主学习、合作探究的能力。 3、情感态度与价值观

C#制作WinForm用户自定义控件实例教程

C#制作WinForm用户自定义控件实例教程 本文将教大家如何使用C#开发WinForm用户自定义控件,自定义控件有好多好处,下面请跟本文一同来学习下吧。 .Nt用户自定义控件继承UserControl类,设计很简单的,像平时在窗体上拖控件一样。 操作步骤: 1. 建立一个工程,添加用户控件。 2.在打开的窗体内输入控件名称,如:"ucButton",按确定按钮。接下来在空白区域拖放3个.Net控件。 如下图:

3.代码 C# code ///

/// C#.Net 设计用户自定义控件 /// /// [ToolboxBitmap(typeof(CustomControl.ucButton), "ucButton.bmp")] public partial class ucButton : UserControl { private bool _IsFocused = false; //标记按钮是否为焦点状态 public ucButton() { InitializeComponent(); this.DoHideFocusedTag(); this.MyCatpionText = https://www.360docs.net/doc/6d183289.html,; } private EventHandler _OnButtonClick = null; private string _MyCatpionText = "ucButton1"; /// /// 按钮标题 /// [EditorBrowsable(EditorBrowsableState.Always)] [Browsable(true)] [DefaultValue("ucButton1")] public string MyCatpionText { get { return _MyCatpionText; } set { _MyCatpionText = value; lblCaption.Text = _MyCatpionText; } } /// /// 用户自定义Click事件 /// [EditorBrowsable(EditorBrowsableState.Always)] [Browsable(true)] public event EventHandler OnButtonClick { add { _OnButtonClick = new EventHandler(value); } remove { _OnButtonClick -= new EventHandler(value); } } private void lblCaption_Click(object sender, EventArgs e) { //转移Click事件, 触发用户自定义事件 if (_OnButtonClick != null) _OnButtonClick(this, e); } private void lblCaption_MouseDown(object sender, MouseEventArgs e) { if (_IsFocused) { lblCaption.Font = new Font(lblCaption.Font.FontFamily, lblCaption.Font.Size, FontStyle.Bold); } } private void lblCaption_MouseUp(object sender, MouseEventArgs e) { if (_IsFocused) { lblCaption.Font = new Font(lblCaption.Font.FontFamily, lblCaption.Font.Size, FontStyle.Regular); } } private void ucButton_SizeChanged(object sender, EventArgs e) { lblUnderLine.Top = this.Height - 1; lblUnderLine.Width = this.Width - 15; } /// /// 还原按钮状态 /// public void DoHideFocusedTag() { this.pictureBox1.Image = global::vjsdn.CustomControl.Properties.Resources.GrayTag; this.lblUnderLine.Visible = false; lblCaption.ForeColor = Color.Black; } /// /// 设计按钮为焦点状态 /// public void DoShowFocusedTag() { this.pictureBox1.Image =

WinForm UI设计与开发思路

WinForm UI 设计与开发思路 最近一年来一直在做WinForm 相关的系统,对WinForm 的UI 设计有一些想法想和大家讨论(主要是比较忙,所以很多只是设想,还没有开发实例) 关于WinUI ,理想的情形应该是外观比较cool ,能给用户良好的使用体验和印象,同时又兼顾功能强大和容易开发。但基于传统的.NET WindowsForms ,恐怕除了容易开发,在其他方面的指标都很普通了。如果为了界面和功能,则复杂度会提高很多,用大量的GDI+和API 操作,相信会让很多人头痛不已。 以下是一些思路: Custom Control 写代码定制控件 Shell Style 利用Shell Style 工具 Flash Control 利用Flash 控件 Html Control 利用Html 控件 编程来实现各种样式的控件,这个是大家比较熟悉和常用的方法,也是上面提到过的。我们现在集中来讲解一下后面三种。 Windows Shell Style 不知道大家在厌倦了Windows 默认的窗体和菜单后,是不是用过一些改变Windows 外观的软件,例如StarDock 公司的很多产品(WindowBlinds 总知道吧)以及TGTSoft 的StyleXP 。

轻松改变Windows程序的外观 事实上微软在Win2000,XP,2003系统上均引入了Visual Style的概念,也就是系统外观主题。它提供了一些API,可以方便地修改Windows窗体和控件的整体外观呈现。所以我们一般在改变Windows的主题后,一般大部分程序的按钮、形状都会跟着改变(在.NET中可能需要将控件的FlatStyle设成System并且EnableVisualStyles()才会有效) 这里要提的是TGTSoft的StyleXP工具,它基于Windows Visual Style架构,同时又有自己的API,此外,它还有其他一些优点,比如它的每种外观样式,全部打包在一个DLL文件中,同时还有相应的工具(StyleBuilder)来制作这些样式DLL。 在安装完StyleXP后,我们可以在"C:\WINDOWS\Resources\Themes\主题名称 \shell"目录中找到该主题的DLL文件。 StyleBuilder让你定制自己的Windows外观 有了这些基础,我们就可以在我们的程序中利用ShellStyle的API来应用这些外观样

winform界面设计规范

Winform开发一般遵循的原则 窗体类型 (2) 尺寸比例 (3) 窗体控件元素 (3) Tab键次序 (5) 快捷键 (5) 右键菜单 (5) 区域排列 (6) UI开发异常处理 (6) 执行动作要提示 (7) 文字表达 (7) 颜色使用恰当,遵循对比原则 (8)

窗体类型 我们把UI理解成窗体以及窗体上用户的交互规则。窗体主要包括主界面类型和对话框类型两种。 主界面指应用程序启动后最主要的界面,其生命周期一般与应用程序保持一致。通过菜单或按钮的形式调用其它子界面和执行功能。一般由以下几个部分组成。标题栏,菜单栏,工具栏,目录栏,工作区,信息输出区(栏)。此外很多应用程序中又增加一些漂浮的子窗体以面板的形式附加到主界面中。

对话框一般指应用程序中具有返回结果的窗体。一般表现为模态窗体,包括信息展现部分,信息输入部分和结果选择按钮三部分组成。此外,UI部分除了主窗体和对话框外还有浮动窗体,托盘菜单等方式与 用户交互。 尺寸比例 主窗体尺寸一般在运行期默认最大化,否则遵循纵横比为4:3,16:9为益。对话框除了和主窗体一样的原则外也有3:4(4:3旋转90度)的纵横比,总之窗体的尺寸只要保证纵横比屏幕一致。 当窗体元素太少,比如只有一个文本标签时,可以不遵循该原则,因为保证窗体尺寸纵横比之前首先要确定窗体不能有大范围的空白区域。 窗体控件元素 主窗体一般按菜单栏,工具栏等组成部分分为上中下左右五个分布区(TOP,Client,Bottom,Left, Right,),根据实际需求可能舍去某些分布区。分布区一般由Split Panel控件分隔,这样可以使用户自行调节各个分布区的尺寸大小。注意处在不同分布区控件的Anchor属性,保证当窗体尺寸因鼠标拖动改变时控件尺寸按照分布原则变化。 下表为控件在不同分布区的Achor属性值。

Winform设计界面规则(与大家共享)

一份界面规范(c/s),和大家共享(摘录) Posted on 2006-07-04 09:33 东人EP阅读(158) 评论(0)编辑收藏引用所属分类: .NET 在参考了很多资料后,整理出来的一份界面规范(是c/s程序的,但其中的原则部分对任何界面都是具有参考价值的),希望能给大家带来帮助。 其中的图片没有贴上来,因为文字已经足够描述清楚了。 ------------------------------------- 1. 界面规范 1.1. 总体原则 l 以用户为中心。设计由用户控制的界面,而不是界面控制用户。 l 清楚一致的设计。所有界面的风格保持一致,所有具有相同含义的术语保持一致,且易于理解 l 拥有良好的直觉特征。以用户所熟悉的现实世界事务的抽象来给用户暗示和隐喻,来帮助用户能迅速学会软件的使用。 l 较快的响应速度。 l 简单且美观。 1.2. 原则详述 1.2.1. 用户控制 用户界面设计的一个重要原则是用户应该总是感觉在控制软件而不是感觉被软件所控制。 l 操作上假设是用户--而不是计算机或软件--开始动作。用户扮演主动角色,而不是扮演被动角色。在需要自动执行任务时,要以允许用户进行选择或控制它的方式来实现该自动任务。l 提供用户自定义设置。因为用户的技能和喜好各不相同,因此他们必须能够个性化界面的某些方面。Windows为用户提供了对许多这方面的访问。您的软件应该反应不同的系统属性--例如颜色、字体或其他选项的用户设置。 l 采取交互式和易于感应的窗口,尽量避免使用模态对话框,而使用"非模式"辅助窗口。"模式"是一种状态,它排除一般的交互,或者限制用户只能进行特定的交互。当最好使用一个模式或该模式只是可替换的设计时--例如,用于在一个绘图程序中选定一个特定感觉-- 请确保该模式是显然的、可见的,是一个明确的用户选定的结果,并且容易取消。 l 在后台运行长进程时,保持前台式交互。例如,当正在打印一个文档,即使该文档不能被改变,用户也应该可以最小化该窗口。 l 谅解。用户喜欢探索一个界面,并经常从尝试和错误中学习。一个有效的界面允许交互式

使用C#开发数据库应用系统(Winform及相关的控件)

第一章初识windows程序 对于winform窗体的相关解释: Form.cs:窗体文件,程序员对窗体编写的代码一般都放在这个文件中; Form.Designer.cs:窗体设计文件,其中的代码是由Visual Studio自动生成的, 一般不需要修改; Form.resx:资源文件,用来配置当前窗体所使用的字符串、图片等资源; Program.cs:主程序文件,其中包括程序入口的main方法; Winform应用窗体文件有两种编辑视图:窗体设计器(进行窗体界面设计,拖放控件等的操作)和代码编辑器。 在代码编辑器中,窗体类的前面多了一个partial,partial是部分的意思,为了方便对代码的管理和编辑,可以使用partial关键字将同一个类的 代码分开放在多个文件中,每个文件都是类的一部分代码,叫做分布 类; 窗体都继承自From类,下面显示的是窗体的主要属性和方法: 属性:说明 Name 窗体对象的名称 BackColor 窗体背景色 BackgroundImage 窗体背景图 FormBorderStyle 窗体显示的边框样式, 七值可选,默认SizaBle ShowInTaskbar 确定窗体是否出现在 windouws任务中,默认true Text 显示文本 TopMost 指示次窗体是否始终显示在 此属性未设置为True的所有窗体 之上 windowState 确定窗体的初始化可视状 态,(normal, Maximized,Minimized,默认为 Normal) 方法说明 Close 关闭 Show 显示窗体

ShowDialog 模式化显示窗体 Hide 隐藏窗体 如果不希望窗体运行后,用户通过鼠标拖拽改变窗体大小,在设计 窗体时可将窗体的FormBorderStyle设置为FixedSingle 使用窗体的show()和Hide()属性来设置窗体的显示和隐藏; 基本控件: Lable:使用他对窗体上的其他控件进行说明和注释;其主要属性是 image(在标签上显示的图像)和text; TextBox:获取用户输入的信息或是显示的信息其主要属性有:MaxLenth:指定可以在文本框中输入的组大字符串(输入数) Multiline:可在文本框中输入多行文本(true or false) PasswordChar:指示在作为密码框时,文本框中显示的字符(而不是实际输入的,只有密码框有此项) ReadOnly(是否允许编辑文本框的文本) Text:与文本框关联的文本 ComboBox:允许用户在组合框内输入文本或从列表中进行选择, 属性: Items:组合框中的项 Item:检索集合中指定索引的项 Count:获得集合中项的数目 isReadOnly:能否修改 DropDowmStyle:组合框的风格,是否允许客户编辑, Text:文本 SelectedIndex:当前选定的索引号,列表中每一项都有 索引,0开始 SelectedItem:获取当前选定的项 方法: add()向组合框中的项列表中添加项 Clear()从组合框中移除所有的项 Remove()从组合框中移除指定项

Winform常用控件的常用属性

常用控件的常用属性 长用 Name :表示一个控件或者窗体的名称。 Anchor:表示窗体拉大后控件会随这窗体的4个方向随之变化。 BackColor:控件和窗体的背景颜色。 BackgroundImage:窗体的背景图片。 Cursor:鼠标经过控件时,鼠标的图标所发生的变化。 ContextMenuStrip:鼠标单击右键,所出先的菜单。 Dock:表示该控件在窗体的那个位置的停靠。 Enabled:表示该控件是否有用默认值Ture 。选False该控件则没有任何作用。 Font:设置控件里字体的大小、字号、字体、和下划线。 ForeColor:在控件里输入字体时,字体的颜色。(默认值为黑色)。 Location:表示该控件在窗体中的位置。X坐标数值越大则控件会越往右,Y坐标数值越大则控件越往下。 Size:该控件的大小width 表示控件的宽度heigth表示控件的高度。 Visible:是否隐藏该控件。选False控件是看不见的。 Tag: Text:控件上显示的字体。 Form窗体 ControlBox:表示窗体的标题栏中时候有最大化、最小化和关闭的按钮选false则不会看见这些按钮。 FormBorderStyle:表示窗体的边框线的样式和标题栏的样式和标题栏按钮显示方式。 Icon:窗体标题栏左边显示的图片。 MaximizeBox:确认标题栏里是否有最大化按钮。 MinimizeBox:确认标题栏里是否有最小化按钮。 StartPosition:运行窗体时窗体在屏幕前在那个位置显示。 WindowState:运行窗体时,窗体的显示方式(比如全屏幕显示、最小化显示、正常显示)。 Label标签 BorderStyle:表示该标签的边框样式。 Image:在该标签上显示的图片。 ImageAlign:要显示图片以什么方式在标签的背景上显示。 ImageList: TextBox文本框 BorderStyle:表示该文本框的边框样式。 MaxLength:可以输入多少个字符。 MultiLine:是否可以拉大文本框的高度。 PasswordChar:你输入文本框的字体是以什么方式进行显示的。(比如输入¥就全部都显示¥)。

相关文档
最新文档