Winform(二)
PictureBox
在 Windows 窗体应用程序中显示图片时要使用图片控件 ( PictureBox ),图片的设置方式与背景图片的设置方式相似。
图片控件中常用的属性如下表所示。
属性名 | 作用 |
---|---|
Image | 获取或设置图片控件中显示的图片 |
ImageLocation | 获取或设置图片控件中显示图片的路径 |
SizeMode | 获取或设置图片控件中图片显示的大小和位置,如果值为 Normal,则图片显不在控件的左上角;如果值为 Stretchimage,则图片在图片控件中被拉伸或收缩,适合图片的大小;如果值为AutoSize,则控件的大小适合图片的大小;如果值为 Centerimage,图片在图片控件中居中;如果值为 Zoom,则图片会自动缩放至符合图片控件的大小 |
图片控件中图片的设置除了可以直接使用 ImageLocation 属性指定图片路径以外,还可以通过 Image.FromFile 方法来设置。
图片控件的名称 .Image = Image. FromFile( 图像的路径 );
实现图片交换。
public partial class PictureBoxForm : Form {
public PictureBoxForm() {
InitializeComponent();
}
private void PictureBoxForm_Load(object sender, EventArgs e) {
string dir = AppDomain.CurrentDomain.BaseDirectory;
pictureBox1.Image = Image.FromFile(dir + "/images/111.jpg");
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox2.Image = Image.FromFile(dir + "/images/222.jpg");
pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
}
private void button1_Click(object sender, EventArgs e) {
PictureBox pictureBox = new PictureBox();
pictureBox.Image = pictureBox1.Image;
pictureBox1.Image = pictureBox2.Image;
pictureBox2.Image = pictureBox.Image;
}
}
注意:使用BaseDirectory
必须将图片的属性修改为复制到运行目录才可以。
运行效果如下所示:
Timer
在 Windows 窗体应用程序中,定时器控件(Timer)与其他的控件略有不同,它并不直接显示在窗体上,而是与其他控件连用,表示每隔一段时间执行一次 Tick 事件。
定时器控件中常用的属性是 Interval,用于设置时间间隔,以毫秒为单位。
实现图片每秒切换一次的功能
private Boolean flag;
public TimerForm() {
InitializeComponent();
}
private void TimerForm_Load(object sender, EventArgs e) {
string dir = AppDomain.CurrentDomain.BaseDirectory;
pictureBox1.Image = Image.FromFile(dir + "/images/111.jpg");
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
timer1.Interval = 1000;
}
private void timer1_Tick(object sender, EventArgs e) {
string dir = AppDomain.CurrentDomain.BaseDirectory;
if (flag) {
pictureBox1.Image = Image.FromFile(dir + "/images/111.jpg");
flag = false;
} else {
pictureBox1.Image = Image.FromFile(dir + "/images/222.jpg");
flag = true;
}
}
private void button1_Click(object sender, EventArgs e) {
timer1.Start();
}
private void button2_Click(object sender, EventArgs e) {
timer1.Stop();
}
}
运行效果如下所示:
DateTimePicker
日期时间控件中常用的属性是设置其日期显示格式的 Format 属性。
Format 属性提供了 4 个属性值,如下所示。
- Short:短日期格式,例如2017/3/1;
- Long:长日期格式,例如2017年3月1日;
- Time:仅显示时间,例如,22:00:01;
- Custom:用户自定义的显示格式。
如果将 Format 属性设置为 Custom 值,则需要通过设置 CustomFormat 属性值来自定义显示日期时间的格式。
在窗体上设置动态的日期时间(使用定时器)。
public partial class DateTimePickerForm : Form {
public DateTimePickerForm() {
InitializeComponent();
}
private void DateTimePickerForm_Load(object sender, System.EventArgs e) {
dateTimePicker1.Format = DateTimePickerFormat.Time;
timer1.Interval = 1000;
timer1.Start();
}
private void timer1_Tick(object sender, System.EventArgs e) {
dateTimePicker1.ResetText();
}
}
运行效果如下所示:
MonthCalendar
日历控件(MonthCalendar)用于显示日期,通常是与文本框联用,将日期控件中选择的日期添加到文本框中。
使用日历控件实现入职日期的选择。
public partial class MonthCalendarForm : Form {
public MonthCalendarForm() {
InitializeComponent();
}
private void MonthCalendarForm_Load(object sender, EventArgs e) {
monthCalendar1.Hide();
}
private void button1_Click(object sender, EventArgs e) {
monthCalendar1.Show();
}
private void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e) {
textBox1.Text = monthCalendar1.SelectionStart.ToShortDateString();
monthCalendar1.Hide();
}
运行效果如下所示:
ContextMenuStrip
WinForm开发中的右键菜单又叫上下文菜单,即右击某个控件或窗体时出现的菜单,它也是一种常用的菜单控件。
在 Windows 窗体应用程序中,上下文菜单在设置时直接与控件的 ContextMenuStrip 属性绑定即可。
创建 Windows 窗体应用程序,并为该窗体创建上下文菜单,菜单项包括打开窗体、关闭窗体。
public partial class ContextMenuStripForm : Form {
public ContextMenuStripForm() {
InitializeComponent();
}
private void 打开窗体ToolStripMenuItem_Click(object sender, EventArgs e) {
ContextMenuStrip menu1 = new ContextMenuStrip();
menu1.Show();
}
private void 关闭窗体ToolStripMenuItem_Click(object sender, EventArgs e) {
this.Close();
}
}
注意:如果运行不显示的话,在窗体的属性中将ContextMenuStrip
属性设置为自定义的。
运行上面的程序,显示效果如下:
MenuStrip
在窗体上添加菜单栏控件 MenuStrip,直接按住 MenuStrip 不放,将其拖到右边的 Windows 窗体中即可。
完成 MenuStrip 控件的添加后,在 Windows 窗体设计界面中就能看到“请在此处键入” 选项,直接单击它,然后输入菜单的名称,例如,“文件”“编辑”“视图”等。
StatusStrip
在 Windows 窗体应用程序中,状态栏菜单(StatusStrip)用于在界面中给用户一些提示,例如登录到一个系统后,在状态栏上显示登录人的用户名、系统时间等信息。
在添加状态栏菜单时,按住 StatusStrip 选项不放,将其拖到右边的 Windows 窗体中即可,如下图所示。
在状态栏上不能直接编辑文字,需要添加其他的控件来辅助。
单击上图所示界面中新添加的状态栏控件,则会显示如下图所示的下拉菜单,其中包括标签控件(StatusLabel)、进度条(ProgressBar)、下拉列表按钮(DropDownButton)、分割按钮(SplitButton)。
ToolStrip
在 C# WinForm开发中添加工具栏(ToolStrip)和添加菜单栏类似,在工具箱中将 ToolStrip 控件直接拖到 Windows 窗体中即可。
为了美观和界面的统一,应将其拖到菜单栏的下方,如下图所示。
在添加了 ToolStrip 控件之后,它只是一个工具条,上面并没有控件,所以它不能响应 一些事件,从而没有功能。
我们可以把它理解成一个占位符,就像是占着一个区域的位置,然后在其上面再添加按钮。
添加按钮也很简单,如下图所示。
MDI窗体
在 Windows 窗体应用程序中,经常会在一个窗体中打开另一个窗体, 通过窗体上的不同菜单选择不同的操作,这种在一个窗体中打开另一个窗体的方式可以通过设置 MDI 窗体的方式实现。
MDI (Multiple Document Interface) 窗体被称为多文档窗体,它是很多 Windows 应用程序中常用的界面设计。
MDI 窗体的设置并不复杂,只需要将窗体的属性 IsMdiContainer 设置为 True 即可。
this.IsMdiContainer = True;
在设置 MDI 窗体以后,窗体的运行效果如下图所示。
在 MDI 窗体中,弹出窗体的代码与直接弹出窗体有些不同,在使用 Show 方法显示窗体前需要使用窗体的 MdiParent 设置显示当前窗体的父窗体,实现的代码如下。
Test t = new Test();
t.MdiParent = this;
t.Show()
创建 MDI 窗体,并在该窗体上设置菜单,包括打开文件、保存文件两个菜单项。
public partial class MDIForm : Form {
public MDIForm() {
InitializeComponent();
this.IsMdiContainer = true;
}
private void 打开文件ToolStripMenuItem_Click(object sender, EventArgs e) {
// 打开操作
TestForm testForm = new TestForm();
testForm.MdiParent = this;
testForm.Show();
}
private void 保存文件ToolStripMenuItem_Click(object sender, EventArgs e) {
// 保存文件操作
Close();
}
}
运行显示的效果如下:
ColorDialog
在 C# WinForm开发中颜色对话框控件(ColorDialog)用于对界面中的文字设置颜色,例如在 Word 中为文字设置颜色。
颜色对话框的运行效果如下图所示。
使用颜色对话框时不会在窗体中显示该控件,需要通过事件调用该控件的 ShowDialog 方法显示对话框。
下面通过实例学习颜色对话框的应用。
使用颜色对话框完成文本框中字体颜色的设置。
public partial class ColorDialogForm : Form {
public ColorDialogForm() {
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) {
DialogResult dr = colorDialog1.ShowDialog();
if (dr == DialogResult.OK) {
textBox1.ForeColor = colorDialog1.Color;
}
}
}
运行显示的效果如下:
FontDialog
字体对话框的运行效果如下图所示。
在使用颜色对话框时不会在窗体中直接显示该控件,需要通过事件调用该控件的 ShowDialog 方法显示对话框。
下面通过实例学习颜色对话框的应用。
【实例】使用颜色对话框完成文本框中字体颜色的设置。
public partial class FontDialogForm : Form {
public FontDialogForm() {
InitializeComponent();
}
//“改变文本字体”按钮的单击事件
private void button1_Click(object sender, EventArgs e) {
//显示字体对话框
DialogResult dr = fontDialog1.ShowDialog();
//如果在对话框中单击“确认”按钮,则更改文本框中的字体
if (dr == DialogResult.OK) {
textBox1.Font = fontDialog1.Font;
}
}
}
运行该窗体,并更改字体的大小,效果如下图所示。
OpenFileDialog和SaveFileDialog
WinForm 开发中文件对话框(FileDialog)主要包括文件浏览对话框,以及用于查找、打开、保存文件的功能,与 Windows 中的文件对话框类似,下面通过实例来演示文件对话框的使用。
【实例】打开一个记事本文件,并更改记事本中的内容,保存到文件中。
根据题目要求,界面设计如下图所示。
在该界面中文本框使用的仍然是 TextBox,并将其设置为允许显示多行文本。
在该界面中“打开文件”和“保存文件”按钮的单击事件分别使用文件读入流和文件写入流来完成对文本信息的读写操作,实现的代码如下。
public partial class FileDialogForm : Form {
public FileDialogForm() {
InitializeComponent();
}
//打开文件
private void button1_Click(object sender, EventArgs e) {
DialogResult dr = openFileDialog1.ShowDialog();
//获取所打开文件的文件名
string filename = openFileDialog1.FileName;
if(dr==System.Windows.Forms.DialogResult.OK && !string.IsNullOrEmpty(filename))
{
StreamReader sr = new StreamReader(filename);
textBox1.Text = sr.ReadToEnd();
sr.Close();
}
}
//保存文件
private void button2_Click(object sender, EventArgs e) {
DialogResult dr = saveFileDialog1.ShowDialog();
string filename = saveFileDialog1.FileName;
if(dr==System.Windows.Forms.DialogResult.OK && !string.IsNullOrEmpty(filename)) {
StreamWriter sw = new StreamWriter(filename, true, Encoding.UTF8);
sw.Write(textBox1.Text);
sw.Close();
}
}
}
运行该窗体,即可完成读取记事本文件的操作。
RichTextBox
RichTextBox 控件在使用时与 TextBox 控件是非常类似的,但其对于读取多行文本更有优势,它可以处理特殊格式的文本。
此外,在 RichTextBox 控件中还提供了文件加载和保存的方法,不需要使用文件流即可完成对文件的读写操作。
下面通过实例来演示 RichTextBox 控件的使用。
【实例】使用 RichTextBox 控件完成文件的打开与保存操作。
public partial class FileDialogForm : Form {
public FileDialogForm() {
InitializeComponent();
}
//打开文件
private void button1_Click(object sender, EventArgs e) {
DialogResult dr = openFileDialog1.ShowDialog();
//获取打开文件的文件名
string filename = openFileDialog1.FileName;
if(dr==System.Windows.Forms.DialogResult.OK && !string.IsNullOrEmpty(filename)) {
richTextBox1.LoadFile(filename, RichTextBoxStreamType.PlainText);
}
}
//保存文件
private void button2_Click(object sender, EventArgs e) {
DialogResult dr = saveFileDialog1.ShowDialog();
//获取所保存文件的文件名
string filename = saveFileDialog1.FileName;
if(dr==System.Windows.Forms.DialogResult.OK && !string.IsNullOrEmpty(filename))
{
richTextBox1.SaveFile(filename, RichTextBoxStreamType.PlainText);
}
}
}
运行上面的窗体会发现使用 RichTextBox 控件的使用非常方式与简单, 并且能更好地控制文件的格式。