WinForm界面布局

合集下载

WinForm窗体界面设计规范(240400)

WinForm窗体界面设计规范(240400)
21, 17
StretchImage
输入法
PictureBox
89, 376
62, 22
StretchImage
主页
PictureBox
3, 376
21, 21
StretchImage
返回
PictureBox
216, 376
21, 21
StretchImage
列表界面
1、新建窗体,按照Form属性的设置方法设置当前窗体属性。
123, 209, 243
数据集
ListView
0, 0
240, 290
Tahoma, 10pt
123, 209, 244, 3
21, 17
StretchImage
关闭
PictureBox
216, 3
21, 17
StretchImage
主页
PictureBox
3, 376
WinForm窗体界面设计规范(240*400)
Form属性
名称
类型
Loaction
Size
WindowState
窗体
Form
0, 0
240, 400
Maximized
登录界面
1、新建窗体,按照Form属性的设置方法设置当前窗体属性。
2、给当前登录窗体添加背景图片,并设置其属性。
3、添加登录验证需要输入用户名和密码对应的文本框,并设置其属性。
21, 21
StretchImage
返回
PictureBox
216, 376
21, 21
StretchImage
50, 60
StretchImage

winform教程

winform教程

winform教程WinForm(Windows Forms)是微软基于.NET Framework开发的一种用户界面设计工具。

它使用了传统的窗体、标签、按钮等控件来创建GUI界面,是使用C#或语言开发桌面应用程序的一种方式。

WinForm教程1. 创建新的WinForm应用程序项目打开Visual Studio,在菜单栏中选择“文件”->“新建”->“项目”,选择“Visual C#”或“Visual Basic”下的“Windows”或“Windows经典桌面”类别,在右侧选择“Windows Forms应用程序”。

输入项目名称,选择存储路径,点击“确定”按钮创建新的WinForm应用程序项目。

2. 设计界面在Visual Studio的设计器中,可以通过拖拽控件来设计界面。

常用的控件包括标签(Label)、文本框(TextBox)、按钮(Button)、列表框(ListBox)等。

选择相应的控件,在窗体上拖拽并调整位置和大小。

可以使用属性窗口来设置控件的属性,例如文本、字体、大小等。

3. 添加事件处理程序在WinForm应用程序中,控件的各种操作通常需要绑定相应的事件处理程序。

例如,当按钮被点击时,需要执行相应的代码。

在设计器中,选择要添加事件处理程序的控件,在属性窗口的“事件”标签页中选择相应的事件,双击后会自动创建事件处理程序并打开代码编辑器。

4. 编写业务逻辑通过代码编辑器,可以编写业务逻辑代码。

例如,在按钮的点击事件处理程序中,可以编写代码来实现具体的功能,如弹出消息框、读取文本框的内容等。

通过使用.NET Framework提供的类库,可以实现各种功能,如数据访问、文件操作、网络通信等。

5. 调试和运行应用程序在编写完业务逻辑代码后,可以通过单击“开始调试”按钮或按下F5键来调试和运行应用程序。

在调试过程中,可以使用调试工具来检查代码执行的情况,并进行逐行调试。

6. 发布应用程序当应用程序开发完成后,可以将其发布为独立的可执行文件。

WINFORM窗体界面设计技巧-不规则、可改变大小、边框半透明效果

WINFORM窗体界面设计技巧-不规则、可改变大小、边框半透明效果

网上也看过很多做.NET窗体的例子,我只是把网上的这些东西综合了一下,主要有下面这些特点:1、边框是半透明的,透明度可根据需要自己更改;2、可以改变窗体的大小,改变后样式不变;3、窗体的边框是不规则的;4、重点解决了窗体会出现闪烁的问题,在窗体移动的时候也不会闪烁;5、使用方便,只要将AlphaFormPanel拖动到一般的窗体上就可以实现换肤;设计思路说明:一、.NET下处理一个窗体部分透明我所知道的有两种方法:1、用一张支持Alhpa通道的图片来处理半透明,这种方式处理出来的效果会很好,甚至可以用一张动态的图片来做背景。

相信有人看过那个游动的鱼的程序,鱼的边缘是半透明的,就是用这种方式做的。

这种方式整个窗体都是通过UpdateLayeredWindow画出来的,如果要在上面加控件的话,所有的控件都要自己来绘制,显然在具体的项目中用这种方式的话会大大增加开发的难度。

有兴趣的人可以看看这个程序:/Files/liutao409/游动的鱼.rar关键的代码就是根据这种支持Alhpa通道的图片来绘制窗体[DllImport("user32.dll", ExactSpelling = true, SetLastError = true)]public static extern int UpdateLayeredWindow(IntPtr hwnd, IntPtr hdcDst, ref Point pptDst, ref Size psize,IntPtr hdcSrc, ref Point pptSrc, Int32 crKey, ref BLENDFUNCTION pblend, Int32 dwFlags);public void SetBits(Bitmap bitmap){if (!haveHandle) return;if(!Bitmap.IsCanonicalPixelFormat(bitmap.PixelFormat)| !Bitmap.IsAlphaPixelFormat(bitmap.PixelFor mat))throw new ApplicationException("图片必须是32位带Alhpa通道的图片。

WinForm界面排版

WinForm界面排版

界面的排版往往决定你的版面可观度,在一年的工作中总结出了一点自己的经验,不知道别人怎么样弄的,反正这是我原创,希望能够对大家有所帮助。

效果预览:
1、新建Form后放一个容器,可以统一选择GroupBox或者Panel,因为Form要停靠在MDI主窗口上,所以我觉得用GroupBox比价好一点。

将GroupBox锚定(ancor)为上下左右。

2、查询条件放在上面,选择一个Panel,命名为pnlTop,Panel锚定为左右上,这样就可以在Panel里面放查询控件。

3、下面放一个Panel,命名为pnlBottom,这个Panel锚定为上下左右。

4、在pnlBttom里面上面放一个Panel,命名为pnlBottomTop,锚定为上下左右,在pnlBottomTop里面放GridView,将它锚定为上下左右。

5、在下面放一个Panel,命名为pnlBottomBottom,将它锚定为下左右,在里面放分页控件,将其锚定为左上。

6、在最上Panel中靠左的控件左上锚定,靠右边的右上锚定,在下层Panel中靠左边的控件锚定为左上,靠右边的锚定为右上。

上面的是两层结构,如果是三层的话则最上层锚定为上左右,中间锚定为左右上下,最下层锚定为下左右。

命名的话pnlTop,pnlMiddle,pnlBottom,有多层嵌套的话则类推。

panel与panel之间的距离容易产生1-2个px的偏差,则进行多页面切换时容易产生抖动,很难看的。

解决的办法
一:设定panel的location
二:通过上下左右键调整panel的location,通过shift+上下左右键可以调整panel的size。

希望对大家有用。

WinForm界面布局

WinForm界面布局

WinForm界面布局Dock & AnchorDock和Anchor是水火不容的,同时给控件设置Dock和Anchor属性时后设置的会覆盖前面的设置。

Dock我初接触WinForm的时候发现控件的Width和Height只能是int,不能设置为百分比,那个时候就想子控件如何跟着父控件而变化呢?父控件变大就变大,而且还填满那个区域。

甚至以为这个需要通过代码来解决,如是在SizeChanged事件里……后来才发现我要的就是Dock给的,Dock是停靠的意思。

Dock属性的类型是DockStyle枚举:1:public enum DockStyle2: {3:None = 0,4:Top = 1,5:Bottom = 2,6:Left = 3,7:Right = 4,8:Fill = 59: }默认是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都得避让:将Panel3调整成第二个添加进去呢?却是这番景象:当然,这里的“优先级”比较只在同一个“层次”起作用,将子控件与父控件同一层次的控件相比较是没有意义的。

winform窗体——布局方式

winform窗体——布局方式

winform窗体——布局⽅式⼀、默认布局★可以加panel,也可以不加;★通过⿏标拖动控件的⽅式,根据⾃⼰的想法布局。

拖动控件的过程中,会有对齐的线,⽅便操作;★也可选中要布局的控件,在⼯具栏中有对齐⼯具可供选择,也有调整各个控件⼤⼩的⼯具。

注:分层:右键点击控件。

可以选择置于顶层或置于顶层。

锁定控件:当部分布局完成,为了操作失误,把布局好的打乱,可以选中布局好的控件,右键,锁定控件,这样布局好得控件就不可以随意拖动了。

⼆、边界布局★属性Anchor:定义某个控件绑定到容器的边缘。

当控件锚定到某个边缘时,与指定边缘最接近的控件边缘与指定边缘之间的距离将保持不变。

★Dock属性:⼀般配合panel使⽤Top:靠上,⾼度不变,左右(宽度)拉伸(拉动窗体时)Bottom:靠下,⾼度不变,左右拉伸(拉动窗体时)Fill:填充整个区域Left:靠左,宽度不变,上下拉伸(拉动窗体时)Right:靠右,宽度不变,上下拉伸(拉动窗体时)三、流式布局(Flowlayoutpanel)也是⼀个panel,与普通panel的区别是它⾥⾯的控件会按照⼀定的⽅向流(布局)★属性FlowDirectiaon:LeftToRight从左到右TopDawn从上往下RightToLeft从右到左BottomUp从下往上四、⽹格布局(表格布局TablelayPanel)默认两⾏两列,可以⾃⼰添加⾏或列。

做好表格后,可以往表格⾥⾯添加控件。

五、卡⽚布局(TabControl)即选项卡,如下图:六、分割布局(SplitContainer)★属性orientation:调整分割⽅式,确定拆分器是⽔平的还是垂直的Vertical:垂直;Horizontal:⽔平的★分割线在窗体启动后,也是可以拖动的分割布局效果图如下:。

规范-WinForm界面设计

规范-WinForm界面设计

版本历史目录1 前言 (4)2 易用性 (4)3 规范性 (5)4 帮助设施 (5)5 合理性 (6)6 美观与协调性 (7)7 菜单位置 (8)8 独特性 (8)9 快捷方式的组合 (9)10 安全性考虑 (9)11 多窗口的应用与系统资源 (10)1 前言本文档是一个用户界面标准。

由于开发软件和系统平台的多样性,并没有针对性的一一给出相应的界面标准,而只是针对Windows平台的风格。

界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。

而且设计良好的界面能够引导用户自己完成相应的操作,起到向导的作用。

同时界面如同人的面孔,具有吸引用户的直接优势。

设计合理的界面能给用户带来轻松愉悦的感受和成功的感觉,相反由于界面设计的失败,让用户有挫败感,再实用强大的功能都可能在用户的畏惧与放弃中付诸东流。

2 易用性按钮名称应该易懂,用词准确,没有模棱两可的字眼,要与同一界面上的其他按钮易于区分,最好能够望文知意。

理想的情况是用户不用查阅帮助就能知道该界面的功能并进行相关的正确操作。

易用性细则:1)完成相同或相近功能的按钮用Frame框起来,常用按钮要支持快捷方式。

2)完成同一功能或任务的元素放在集中位置,减少鼠标移动的距离。

3)按功能将界面划分局域块,用Frame框起来,并要有功能说明或标题。

4)界面要支持键盘自动浏览按钮功能,即按Tab键的自动切换功能。

5)界面上首先应输入的和重要信息的控件在Tab顺序中应当靠前,位置也应放在窗口上较醒目的位置。

6)同一界面上的控件数最好不要超过10个,多于10个时可以考虑使用分页界面显示。

7)分页界面要支持在页面间的快捷切换,常用组合快捷键Ctrl+Tab8)默认按钮要支持Enter操作,即按Enter后自动执行默认按钮对应操作。

9)可写控件检测到非法输入后应给出说明并能自动获得焦点。

10)Tab键的顺序与控件排列顺序要一致,总体从上到下,同时行间从左到右的方式。

winform ui界面设计例程

winform ui界面设计例程

winform ui界面设计例程WinForms 是一个用于创建 Windows 应用程序的桌面应用程序框架,它提供了丰富的用户界面设计功能。

在 WinForms 中,你可以使用 Visual Studio 或者其他集成开发环境来创建 UI 界面。

下面我将从创建新项目、设计界面、添加控件和事件处理等方面来介绍 WinForms UI 界面设计的例程。

首先,你可以打开 Visual Studio,并选择创建一个新的WinForms 项目。

在创建项目的过程中,你可以选择项目的名称和保存位置等信息。

创建完成后,你会看到一个空白的窗体(Form)出现在你的项目中。

接下来,你可以开始设计界面。

在窗体上拖放控件,比如按钮、文本框、标签等,来构建你的界面布局。

你可以使用属性窗格来调整控件的属性,比如大小、位置、颜色等。

你还可以使用布局管理器来帮助你更好地管理控件的布局。

除了基本的控件外,你还可以使用自定义控件或者第三方控件来丰富你的界面设计。

这些控件可以帮助你实现更复杂的功能和更美观的界面效果。

在界面设计完成后,你可以添加事件处理程序来响应用户的操作。

比如,当用户点击按钮时,你可以编写代码来处理按钮的点击事件,执行相应的操作。

除了界面设计,你还可以在 WinForms 中实现数据绑定、图形绘制、动画效果等功能。

这些功能可以帮助你实现更丰富的用户界面交互体验。

总的来说,WinForms 提供了丰富的工具和功能来帮助你设计和实现 Windows 应用程序的用户界面。

通过合理的布局和控件选择,结合事件处理和其他功能,你可以创建出功能丰富、美观的 UI 界面来满足用户需求。

希望这些信息能对你有所帮助。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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都得避让:
将Panel3调整成第二个添加进去呢?却是这番景象:
当然,这里的“优先级”比较只在同一个“层次”起作用,将子控件与父控件同一层次的控件相比较是没有意义的。

Anchor
Dock一般是划分区域的,将一个窗体或大控件划分几个大区域以便布局,就像Web中的div 一样。

但有的时候我们却想子控件在父控件里的相对位置不要随着父控件的变大缩小而变化,或者控件边缘距离父控件边缘的相对距离不要发生变化,但又不是停靠在父控件的边缘,这就是Anchor该出场的时候了。

Anchor属性的类型是AnchorStyles位标记(如果不理解位标记就将其理解为可以使用位运算符进行操作,从而可以设置多个值的枚举吧,深入理解请参见MSDN或《CLR via C#》中对位标记的描述):
1: [Flags]
2:public enum AnchorStyles
3: {
4:None = 0,
5:Top = 1,
6:Bottom = 2,
7:Left = 3,
8:Right = 4
9: }
Anchor的默认值是Anchor.Left | Anchor.Top,也就是子控件与父控件的左边缘和上边缘的相对位置不会变化,这也保证了在窗体最大化后子控件的位置不会发生变化:
窗体默认显示时->
窗体变大后->
还是悬停在左上角不会发生变化。

那如果设置为Left和Right呢?当Anchor设置为Left|Right 的时候,为了确保父控件(在这里就是Form)变大时,控件的边缘与父控件距离不变,子控件会自动的扩大:
总之,记着Anchor的中文意思:锚。

当给控件设置Anchor的时候,就相当于用一个铁钉将控件的边缘给钉住。

Padding & Margin
Padding和Margin没有什么好说的,和CSS的盒模型描述的一模一样,Padding指的是控件内部空间,Margin指的是控件之外的:
padding和margin都可以指定四个值。

AutoSize
有的时候我们需要控件随着里面的内容的增长而增长,比如在做多语言的程序时,各国的语言描述同一个意思的时候长度会不同,这个时候就需要AutoSize为true了,这样当文字过长不会被截断。

关于AutoSize更详细的内容请参见MSDN。

如何面对复杂界面?出了问题咋办?
设计时
当界面变得越来越复杂的时候,我们很期望了解控件之间的层次关系,这个按钮是放在哪个Panel上?这个Panel的区域又是咋样的。

我刚接触WinForm的时候,我非常期望WinForm 上也有类似于IE Developer Toolbar的工具,点击HTML,可以可视化的在界面上显示区域,在界面上选中某区域,也可以定位到HTML元素。

实际上在设计WinForm界面时也是可以的。

这就是Visual Studio的Document Outline窗口(View->Other Windows->Document Outline):
不过如果你只想顺着button1->panel4->panel3->……这条线导航控件树,有更方便的方法:ESC键。

选中一个控件,然后敲ESC键就会顺着这个控件层次不断的上溯。

选中一个控件,然后点击右键,还会出现Select …的菜单,可以选中该控件的某个父控件:
真是够方便的~~~
运行时
不过有个问题是,上面的方法都是设计时的,有的时候我们的程序中如果动态的修改了某些涉及布局的属性最后发现界面乱套了,这可咋整。

运行时的问题当然要运行时解决,给某个父控件附加Layout事件,当修改了涉及Layout的属性时会触发这个事件(也有特例,下一节介绍)。

这个事件会有一个LayoutEventArgs参数,该参数有AffectedProperty属性,该属性指示的就是影响布局的罪魁祸首,你就找到病症所在了。

SuspendLayout & ResumeLayout
我想大家对这两个方法肯定不默认,几乎在WinForm里的InitializeComponent方法里,在方法开始处有会调用SuspendLayout方法,然后在方法快结束处会调用ResumeLayout方法。

有些的读者也许还尝试过删除这两个方法,发现程序表现行为和以前也一样。

了解这两个方法对WinForm程序的性能还是挺有帮助的,在上一节提到修改涉及Layout的属性时会触发Layout事件,但是有特例,特例就是调用了SuspendLayout方法,关于修改哪些属性会触发Layout事件请查阅MSDN。

在代码中如果修改Size、Dock等属性或向父控件添加子控件时,会执行布局逻辑,有的时候甚至会重绘。

当我们要修改一堆的这样的属性时,比如前面提到的InitializeComponent方法,我们当然不想修改一下就执行一次布局逻辑,那太慢了。

这个时候在修改之前你就可以调用SuspendLayout方法挂起布局逻辑,等所有属性都设置好后再调用ResumeLayout属性,特别是在界面很复杂的时候性能有很大的提升。

Visual Studio默认将设置这些属性的语句全部放在InitializeComponent方法里,然后用SuspendLayout和ResumeLayout括住,所以我们一般不要自作主张的将这些属性移出到外面设置,不过有的时候我们想在代码里动态生成一些界面,比如添加一些子控件什么的,我们最好也像VS干的那样调用这两个方法。

要注意的是,并不是调用了Form的SuspendLayout和ResumeLayout方法就一了百了了。

如果你是向一个Panel添加子控件,你还得调用Panel的这两个方法。

总结
本文介绍了WinForm界面布局的初步知识,还介绍了通过临时挂起布局逻辑来优化程序性能。

这些都很基础也很简单,应付简单的布局是够了,不过对于更灵活更复杂的布局就要涉及布局引擎的内容了,这个我会在下一节里介绍。

相关文档
最新文档