资源描述
第6章——图形控件和其他控件的使用练习资料 08班计算机(软工方向)用 指导教师:王亚宁
图形控件和其他控件应用练习
一、PictureBox控件应用练习:
在窗体或图片框中输入图像有两种方式:一是在设计时,利用【属性】对话框输入,具体来说就是选择对象的Image属性[参见教材P114的示例,请自行练习];二是在程序中使用【文件打开】对话框输入,详见下面的示例介绍。
【实验一】:使用【文件打开】对话框在图片框控件中输入图像。
⑴〖界面设计〗:
窗体设计界面如右下图所示:由1个PictureBox控件、1个OpenFileDialog控件、1个Button控件组成。完成在PictureBox内显示图像。
MOpenFileDialog控件是非可视的,设计时和运行时都不出现在窗体上。设计时放置该控件时,它出现在窗体的下方。对于其他非可视化控件也是这样。
⑵〖确定〗按钮的单击事件代码如下:
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog(); //行1
Bitmap p1 = new Bitmap(openFileDialog1.FileName); //行2
pictureBox1.Image = p1;
}
〖说明〗;
行1:利用OpenFileDialog控件显示一个“打开文件”对话框;
【说明:“文件打开对话框”是C#预置的一种通用对话框,它由OpenFileDialog类实现,其常用方法是ShowDialog方法,用于显示打开文件对话框。】
行2:(从指定的现有图像)建立一个Bitmap对象。
【说明:在C#中进行图像处理一般通过Image类及其派生类来实现。Image类是一个抽象类,不能直接使用,可以使用它的派生类Bitmap类。Bitmap类可以处理由像素数据定义的图像。】
行3:把第2行建立的Bitmap对象赋值给图片框的Image属性,使之显示图像。
【实验二】:循环播放多幅图片。
〖功能说明〗:用图形框显示三个位图图形之一:image0、image1或image2。这些图形位于该工程的bin/Debug目录的images目录中。
〖界面设计〗:
窗体设计界面如右下图所示:由1个PictureBox控件、1个Button控件组成。完成在PictureBox内显示多个图像。
步骤:
⑴新建一个名为PictureBoxExApp2的windows项目文件。并在该项目的bin/Debug目录下新建一个名为images的文件夹,并在该文件夹中存放3幅将要显示的图片(image0、image1和image2)。
⑵在窗体上添加1个PictureBox控件和1个按钮控件。按运行界面设置各控件的属性。
⑶选中PictureBox控件,再单击其Image属性右边的设置按钮,打开“选择资源”对话框,选中“项目资源文件”单选按钮,单击下面的“导入”命令按钮,依次导入3幅图片:image0、image1和image2。如右图所示:
F在将图片放入图片框之前,首先将其放入项目所在的文件夹中,实际上这张图片保存在窗体的.resx文件中。
⑷双击button1按钮切换到代码视图,打开按钮的Click事件处理器,输入如下代码:
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.IO; /*这个using子句必须添加,否则后面将不能使用Directory类的GetCurrentDirectory()方法获取图片的相对路径*/
namespace PictureBoxExApp2
{
public partial class Form1 : Form
{
private int imageNum = -1; //定义字段imageNum,用于决定显示哪一幅图片
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
imageNum = (imageNum + 1) % 3; //让变量imageNum的值从0循环到2
pictureBox1.Image = Image.FromFile(Directory.GetCurrentDirectory()+
@"\images\image"+imageNum+".jpg"); //从文件中生成Image对象,在图片框控件中显示图片
}
}
}
试验一下:如果不添加using System.IO;命令,会有什么错误提示?
二、ImageList控件应用练习
【ImageList控件应用一】:用ImageList为按钮提供图片
步骤:[详见P113~图4-19]
⑴添加三个按钮和一个ImageList控件。
⑵设置各控件的属性
ImageList控件小结:
MImageList控件本身是不可视的,单独使用它也没有任何意义,它的功能是为窗体上的其他控件提供要显示的图像。因此,ImageList控件总是要与其他某个控件相关联。
可以与ImageList控件相关联的控件包括ListView、TreeView、TabControl、Button、CheckBox、RadioButton和Label控件。若要使ImageList控件与一个控件相关联,请将该控件的ImageList属性设置为ImageList控件。
当某个控件与ImageList控件建立关联后,通过设置它的ImageIndex属性的值来指定在控件上显示的图像的索引。值为0表示显示ImageList控件中的第一个图像,值为1表示显示ImageList控件中的第二个图像,依次类推。
另:ImageList控件的ColorDepth属性确定呈现图像时所使用的颜色数量;ImageSize属性决定ImageList控件中各图像的大小。
【ImageList控件应用二】:为工具栏按钮绑定图片
分析:
工具栏按钮表面通常都显示为图像,虽然我们可以通过ToolStripButton控件的Image属性来设置这些图像,但常用的方式是通过ImageList控件提供图片。
步骤:
⑴添加工具栏(包含3个按钮)和1个标签控件,界面设置如右图所示。〖工具栏的用法详见P139~〗
⑵各工具栏按钮的单击事件代码如下:
//工具栏上“加粗”按钮的单击事件
private void toolStripButton1_Click(object sender, EventArgs e)
{
label1.Font = new Font(label1.Font,FontStyle.Bold);
}
//工具栏上“斜体”按钮的单击事件
private void toolStripButton2_Click(object sender, EventArgs e)
{
label1.Font = new Font(label1.Font,FontStyle.Italic);
}
//工具栏上“下划线”按钮的单击事件
private void toolStripButton3_Click(object sender, EventArgs e)
{
label1.Font = new Font(label1.Font,FontStyle.Underline);
}
⑶现将工具栏各按钮的Image属性清空,添加ImageList控件,通过此控件来重新设置工具按钮的图像。
(注:ImageList控件位于工具箱的“组件”栏中。)
在代码编辑器中,把ImageList控件赋值给工具栏的ImageList属性(在设计状态下无法设置该属性);给各个工具栏按钮的ImageIndex属性赋值为ImageList中的图像的索引。
//使用ImageList控件,在窗体的加载事件中为工具栏中各个按钮设置图像。
private void Form1_Load(object sender, EventArgs e)
{
toolStrip1.ImageList = imageList1;
toolStripButton1.ImageIndex = 0;
toolStripButton2.ImageIndex = 1;
toolStripButton3.ImageIndex = 2;
}
四、定时控件应用练习
定时器应用示例一:详见P142~【5-10】
定时器应用示例二:数学时钟
〖功能说明〗:在该示例中,窗体上动态显示当前的系统时间,就像一个跳动着的时钟一样,用户还可以停止或开启时钟的跳动。界面如下图所示:
〖参考代码〗如下:
⑴在窗体的Load事件中进行初始化设置,代码如下:
private void Form1_Load(object sender, EventArgs e)
{
button1.Text = "停止";
timer1.Enabled = true;
//设置触发Tick事件的间隔是1秒
timer1.Interval = 1000;
}
⑵Timer控件的Tick事件处理过程,代码如下:
private void timer1_Tick(object sender, EventArgs e)
{
label1.Text = DateTime.Now.ToLongTimeString();
}
@〖分析〗:①DateTime结构[详见相关资料(P103~第4章)]:用于表示日期和时间。
②Now属性:为DateTime结构的属性,用于获取此计算机上的当前日期和时间。
③ToLongTimeString()方法:将此实例的值转换成等效的长时间字符串表示形式。
⑶按钮控件的Click事件处理过程如下:
private void button1_Click(object sender, EventArgs e)
{
if (button1.Text == "开始")
{
button1.Text = "停止";
timer1.Enabled = true;
}
else
{
button1.Text = "开始";
timer1.Enabled = false;
}
}
定时器应用示例三:制作一个动画效果
〖功能说明〗:在本示例中,单击窗体上的起飞按钮,飞鸟开始从右到左开始移动,周而复始。界面如下图所示:
〖参考代码〗如下:
⑴按钮控件的Click事件处理过程如下:
private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = true; //使时钟处于运行状态
}
⑵Timer控件的Tick事件处理过程代码如下:
private void timer1_Tick(object sender, EventArgs e)
{
//获得图片的位置
int X=pictureBox1.Left;
int Y=pictureBox1.Top;
int W=pictureBox1.Width;
int H=pictureBox1.Height;
//移动图片
X -= 10;
if (X <= -pictureBox1.Width)
{
X = this.Width; //如果图片出了左边界,将局部变量X的值设置为窗体宽度
}
pictureBox1.SetBounds(X,Y,W,Y); //将控件的指定边界设置为指定位置和大小
}
【本章综合实验】建立一个简易计算器,能够计算小数的加、减、乘、除、求余、求绝对值运算、求平方根。(可以仿照下图所示)
第 5 页 共 5 页
展开阅读全文