根据本实例,读者可以实现以下功能。 根据所给图片制作相应的窗体界面。 用图片代替控件制作相应的窗体界面。 1.6 特殊形状的窗体
将界面以不规则的形状显示在桌面上,可以给用户一种新鲜的感觉。本节主要对窗体以特殊的形状进行显示,如非矩形窗体和字体形窗体等。 实例022 非矩形窗体 实例说明
大部分Windows窗体都是一个矩形区域,读者是否已经厌倦了这种中规中矩的矩形窗体?本例中的窗体是一个打破传统矩形的异型窗体,运行该例会看到一个非常可爱的窗体,单击【X】按钮就会使窗口关闭。实例效果如图1.22所示。 技术要点
以前,创建非矩形窗体是一个既费时又费人力的过程,其中涉及到 API 调用和大量的编程工作。在.NET 2.0框架中可以不调用API非常轻松的实现这一功能。只要重写窗体的OnPaint方法,在方法中重新绘制窗体,然后用透明色将窗体设置透明即可。
(1)Form.OnPaint方法:此成员重写Control.OnPaint。用来重新绘制窗体图像。其结构如下: protected override void OnPaint (PaintEventArgs e) 参数说明如下。
l PaintEventArgs:为Paint事件提供数据。 实现过程
(1)创建一个项目,将其命名为Ex01_22,默认窗体为Form1。
(2)在窗口中添加Label控件,并将BackColor属性设为透明,将text属性设为空。 (3)将窗体的TransparencyKey属性设为窗体的背景色。 (4)主要程序代码。
设置图片透明颜色的实现代码如下:
private void Form1_Load(object sender, EventArgs e) {
bit = new Bitmap(\ bit.MakeTransparent(Color.Blue);
}
重写基类方法,具体代码如下:
protected override void OnPaint(PaintEventArgs e) {
e.Graphics.DrawImage((Image)bit, new Point(0, 0));//将图片画出 } 举一反三
根据本实例,读者可以开发以下程序。 可以把窗体制做成各种卡通图形。 可以将窗体制做成各种几何图形。 可以将窗体制做成桌面小精灵。 实例023 建立字体形状窗体 实例说明
大家都见过不规则形状的窗体吧,那么如何制作一个文字形的窗体呢?文字形窗体一般应用在屏幕提示中,如收款机屏幕等。运行本例,效果如图1.23所示。 技术要点
以前,创建字体形窗体是一个既费时又费人力的过程,其中涉及到API调用和大量的编程工作。在.NET 2.0框架中可以不调用API非常轻松的实现这一功能。只要先将字体画在一幅图上,然后重写窗体的OnPaint方法(方法的详细内容可以参见实例022),在方法中用图重新绘制窗体,用背景色将窗体设置透明即可。 实现过程
(1)创建一个项目,将其命名为Ex01_23,默认窗体为Form1。 (2)主要程序代码。
namespace SpecialSharpWindows {
public partial class Form1 : Form {
Bitmap bit;
public Form1() {
InitializeComponent(); }
设置图片透明颜色的实现。代码如下:
private void Form1_Load(object sender, EventArgs e) {
bit = new Bitmap(\ bit.MakeTransparent(Color.Blue); }
重写基类方法的实现。代码如下:
protected override void OnPaint(PaintEventArgs e) {
e.Graphics.DrawImage((Image)bit, new Point(0, 0)); }
private void label1_Click(object sender, EventArgs e) {
this.Close(); } } } 举一反三
根据本实例,读者可以实现以下功能。 制作圆形的窗体。 制作锯齿状的窗体。
实例024 控件随窗体自动调整 实例说明
在软件开发中,随着窗体的大小变化,界面会和设计时出现较大的差异,控件和窗体的大小会不成比例非常不美观。本例中的控件是一个可以随窗体大小变化的控件。运行该例会看到一个控件随窗体大小变化的窗体。实例效果如图1.24所示。 技术要点
在.NET 2.0框架中可以非常轻松的实现这一功能。大多数控件都有Anthor属性,当在窗体上添加控件时设置Anthor属性即可。Anthor属性是个锚定属性,指定了控件距容器边缘的距离。当窗体大小变化时,控件距窗体边缘的距离不变,自然大小就随窗体自动调整。 实现过程
(1)创建一个项目,将其命名为Ex01_24,默认窗体为Form1。
(2)在窗体上添加MenuStrip控件、ToolStrip控件和Button控件。并设置Button的Anthor属性和Text属性。 举一反三
根据本实例,读者可以实现以下功能。 图片大小随着窗体大小变化的窗体。 菜单栏大小随着窗体大小变化的窗体。 实例025 带分隔栏的窗体 实例说明
在软件开发中,经常需要将界面分成几个部分,而且这几个部分又可以自由调整大小。运行本例,实例效果如图1.25所示。 技术要点
在.NET 2.0框架中可以非常轻松的实现这一功能,只要在窗体中加入SplitContainer控件即可。SplitContainer控件带有一个分隔栏,用来把窗体分成两部分。 实现过程
(1)创建一个项目,将其命名为Ex01_25,默认窗体为Form1。
(2)在Form1窗体上添加MenuStrip控件用来设计菜单栏,添加ToolStrip控件用来设计工具栏,添加SplitContainer控件用来设计分隔栏。 举一反三
根据本实例,读者可以实现以下功能。 分成3部分的窗体。 分成4部分的窗体。
实例026 随机更换主界面背景 实例说明
如果开发的软件用户使用频率非常高,可以为程序设计随机更换背景的程序。这样不但可以使用户心情愉快,也增加了软件的人性化设计。下面的界面就是一个随机更换主界面的例子,效果如图1.26所示。 技术要点
随机更换主界面背景使用了Random类和ImageList控件。首先为ImageList控件添加一组图片,然后实例化一个Random类,再用Next()方法产生一个随机数以决定将哪个图片设为背景。 Random.Next()方法用来返回一个小于所指定最大值的非负随机数。其结构如下: public virtual int Next (int maxValue) 参数说明如下。
l maxValue:要生成的随机数的上界(随机数不能取该上界值)。maxValue必须大于或等于零。
l 返回值:大于或等于零且小于maxValue的32位带符号整数,即返回的值范围包括零但不包括maxValue。 实现过程
(1)创建一个项目,将其命名为Ex01_26,默认窗体为Form1。
(2)在Form1窗体上添加ImageList控件,并为ImageList控件添加图片。 (3)主要程序代码。
private void Form1_Load(object sender, EventArgs e) {
Random rdn = new Random();
int i = rdn.Next(imageList1.Images.Count);//产生一个随机数 this.BackgroundImage = imageList1.Images[i]; } 举一反三
根据本实例,读者可以开发以下程序。 每天更换主程序背景的主界面。
随机更换菜单栏、工具栏图标的主程序。