第三章GUI程序设计.ppt

上传人:本田雅阁 文档编号:3504215 上传时间:2019-09-04 格式:PPT 页数:73 大小:512.05KB
返回 下载 相关 举报
第三章GUI程序设计.ppt_第1页
第1页 / 共73页
第三章GUI程序设计.ppt_第2页
第2页 / 共73页
第三章GUI程序设计.ppt_第3页
第3页 / 共73页
第三章GUI程序设计.ppt_第4页
第4页 / 共73页
第三章GUI程序设计.ppt_第5页
第5页 / 共73页
点击查看更多>>
资源描述

《第三章GUI程序设计.ppt》由会员分享,可在线阅读,更多相关《第三章GUI程序设计.ppt(73页珍藏版)》请在三一文库上搜索。

1、版权所有,1,第三章 GUI程序设计,GUI(Graphics User Interface),即图形用户界面,是指用图形的方式实现人与计算机之间的交互。,2,版权所有,目录,GUI程序设计方法 窗体 对话框 标签、文本框和按钮 菜单和多文档界面 工具栏和状态栏 单选钮、复选钮、组和面板 列表框、组合框和复选列表框,3,版权所有,3.1 GUI程序设计方法,3.1.1 GUI程序模型,4,版权所有,3.1.2 建立GUI应用程序的一般步骤 利用C#编写GUI应用程序的一般步骤: (1)建立“Windows应用程序”项目 (2)设计应用程序界面 (3)设置窗口和控件的属性 (4)编写事件方法代码

2、 (每个事件对应一个方法,如鼠标下按一个按钮,对应一个方法,程序员可以编写该方法,所以控制了这个按钮的行为),5,版权所有,3.1.3 控件的基本属性(Control,child window) 下面介绍的一些属性是多数控件都具有的属性: (1)Name:用来获取或设置控件的名称。名称是控件的标识。要控制一个控件,就必须找到它。 (2)Text:用来获取或设置控件的标题文字。 (3)Width和Height:用来获取或设置控件的大小。 (4)Left和Top:用来获取或设置控件的位置。 (5)Visible:用来获取或设置控件是否可见。取值为true或false。 (6)Enabled:用来获

3、取或设置控件是否对响应交互。取值为true或false。 (7)ForeColor:用来获取或设置控件的前景色。 (8)BackColor:用来获取或设置控件的背景色。,6,版权所有,(9)Font:用来获取或设置控件的字体。 (10)BorderStyle:用来获取或设置控件的边框。 (11)AutoSize:用来获取或设置控件是否自动调整大小。取值为true或false。 (12)Anchor:获取或设置控件的哪些边缘锚定到其容器边缘。(Anchor 锚 ) (13)Dock:获取或设置控件停靠到父容器的哪一个边缘。(dock 码头; 船坞 ) (14)TabIndex:用来获取或设置控件

4、的Tab键顺序。 (15)TextAlign:用来确定文本对齐方式。 (16)Cursor:用来获取或设置鼠标移到控件上时,被显示的鼠标指针的类型。 (17) opacity 不透明度; 阻光度 0100%,7,版权所有,对话框窗口控制,1、大小、位置、标题、最小最大按钮 2、鼠标、透明度 3、字体、是否置顶 4、事件:鼠标的移动、下按,8,版权所有,按钮的控制:button,常见属性: Location、Image、TabStop、Size、Visible 改变方法:对象名.属性= 事件:在资源框中双击产生事件的处理函数 鼠标下按 private void button1_Click(obj

5、ect sender, EventArgs e) / 添加代码 ,9,版权所有,实验1,在对话框中增加一个按钮,双击按钮得到事件处理函数,添加代码,观察执行结果: private void button3_Click(object sender, EventArgs e) this.Text = “Hello”; /和C+的this-不同 Size si=new Size(200,200); this.Size = si; Point po = new Point(si); this.Location = po; Color c = new Color(); this.BackColor =

6、c; this.Opacity = 50; MessageBox.Show(this.Text); ,10,版权所有,实验2:用一个按钮控制另一个按钮,控制另一个按钮的: 位置、大小、是否显示、使能、取得Title,设置Title 过程:生成2个按钮,双击其中一个按钮,添加代码。 试验3:控制窗口透明度,11,版权所有,private void button2_Click(object sender, EventArgs e) Point p = button1.Location; p.X+; p.Y+; button1.Location = p; Size s = button1.Size;

7、 s.Height+=3; s.Width+=3; int x = (int)button1.Font.Size; x+; Font f = new Font(“宋体”, x); /建立字体对象 button1.Font = f; /设置字体 button1.Text = “哥变了吗?“; button1.Size = s; button1.ForeColor=Color.Red;,12,版权所有,事件处理程序是绑定到事件的方法。当引发事件时,执行事件处理程序内的代码。每个事件处理程序提供两个使您得以正确处理事件的参数。如下为Button 控件的 Click 事件的事件处理程序: privat

8、e void button1_Clicked(object sender,System.EventArgs e) 第一个参数 sender 提供对引发事件的对象的引用。第二个参数e传递针对要处理的事件的对象。通过引用对象的属性(有时引用其方法)可获得一些信息,如鼠标事件中鼠标的位置或拖放事件中传输的数据。,事件和事件处理方法,13,版权所有,编辑框:可编辑框和静态框,14,版权所有,实验1:让编辑框中内容为大写,15,版权所有,代码,private void textBox1_TextChanged(object sender, EventArgs e) textBox1.Text=textB

9、ox1.Text.ToUpper();/转大写 textBox1.SelectionStart = textBox1.Text.Length; /移动光标到最后 /label1.Text = “程序员改变“; ,16,版权所有,控制编辑框,位置、大小、光标位置、前景色、字符颜色 修改内容。 private void button1_Click(object sender, EventArgs e) textBox1.Text = “sdFdgG”; /修改内容 textBox1.ForeColor = Color.Red;/修改文本颜色 textBox1.BackColor = Color.S

10、eaGreen; textBox1.SelectionStart = 1;/修改光标位置 textBox1.Focus(); /编辑框获得焦点 ,17,版权所有,补充:定时器,定时发生的操作。最常用的地方,如计时器。 1、添加定时器:视图工具箱鼠标左键按住 timer 拖拉到窗口。单击它,看到如下。 2、,18,版权所有,3、双击 timer1,会自动生成定时器事件方法。 4、切换到刚才的资源界面,添加一个按钮,一个编辑框。 5、双击按钮,添加如下代码 private void timer1_Tick(object sender, EventArgs e) /定时执行的代码 DateTime

11、d = DateTime.Now; textBox1.Text = d.ToString(); private void button1_Click(object sender, EventArgs e) timer1.Interval = 1000; timer1.Enabled = true; /允许状态 timer1.Start(); /开始定时 ,19,版权所有,本次课要求,GUI的基本操作 资源界面与代码界面的切换 增加控件 设置属性,基本属性的作用 定时器的生成与使用。,20,版权所有,多用途编辑框,工具箱RichTextBox,21,版权所有,这样查找参考资料,22,版权所有,掌

12、握要点,设置内容、设置选中的内容、取出选中的内容、设置光标位置并插入内容、在指定位置插入字符串,23,版权所有,private void button1_Click(object sender, EventArgs e) richTextBox1.Text = “HHHHHHjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj“; richTextBox1.SelectionColor = Color.Red; richTextBox1.Focus(); richTextBox1.Select(10, 20); richTextBox1.Selection

13、Start = 15; /移动光标到 richTextBox1.SelectionColor = Color.Red; Font f = new Font(“宋体“, 16); richTextBox1.SelectionFont = f; richTextBox1.SelectionBackColor = Color.Black; String s = richTextBox1.SelectedText; /MessageBox.Show(s); richTextBox1.SaveFile(“C:test1.txt“, RichTextBoxStreamType.TextTextOleObj

14、s);/保存成txt richTextBox1.SaveFile(“C:test1.rtf“, RichTextBoxStreamType.RichText);/保存成rtf格式 ,24,版权所有,private void button2_Click(object sender, EventArgs e) OpenFileDialog d = new OpenFileDialog(); if (d.ShowDialog() = DialogResult.OK) /读txt文件 richTextBox1.LoadFile(d.FileName,RichTextBoxStreamType.Plai

15、nText); private void button3_Click(object sender, EventArgs e) OpenFileDialog d = new OpenFileDialog(); if (d.ShowDialog() = DialogResult.OK) /读rtf文件 richTextBox1.LoadFile(d.FileName, RichTextBoxStreamType.RichText); ,25,版权所有,在指定位置插入文本,private void button4_Click(object sender, EventArgs e) string te

16、xtData = “I want to put this string on the clipboard.“; Clipboard.SetData(DataFormats.Text, (Object)textData); richTextBox1.Text = “哈哈和经济上看看看看看撒或积极啊“; richTextBox1.SelectionStart = 10; if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text) = true) richTextBox1.Paste(); ,26,版权所有,插入图片,OpenFile

17、Dialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.Filter = “图片文件|*.jpg|所有文件|*.*“; if (openFileDialog1.ShowDialog() = DialogResult.OK) Clipboard.SetDataObject(Image.FromFile(openFileDialog1.FileName), false); richTextBox1.Paste(); ,27,版权所有,单选与多选按钮,CheckButton:可以多选,是按钮的一种 RadioButton:只能单选

18、,是按钮的一种,28,版权所有,要求掌握,会设置初始状态、会取状态。方法是,知道其名字,然后取它的成员。 bool re = Man.Checked; /取状态,true为选中,false为没有选中 Man.Checked=false; /去选中,29,版权所有,列表框ListBox,显示多项,可以单选或多选。,30,版权所有,要求,初始化:设置行宽、字体、内容,是否多选 1、加内容 listBox1.Items.Add(“Hello”); 2、是否支持选择多列 public Form1() InitializeComponent(); listBox1.ItemHeight = 40; /行

19、高 /多选如图,在行为中,代码如下 listBox1.SelectionMode = SelectionMode.MultiSimple;,31,版权所有,获取行数:listBox1.Items.Count 删除某行: listBox1.Items.RemoveAt(0); 清空:listBox1.Items.Clear(); 检索: int n=listBox1.FindString(“sss“, 0); 表示从0行开始检索有内容“sss”的,有则返回行号,32,版权所有,多选提取选中的内容,private void button2_Click(object sender, EventArg

20、s e) for (int i = 0; i listBox1.SelectedItems.Count; i+) string s = listBox1.SelectedItemsi.ToString(); s += “ “ ; s += i.ToString(); MessageBox.Show(s); 见例子ListBox多选,33,版权所有,组合框Combox,用来选择子项;上面是编辑框,下面是列表框。 要求掌握:加入内容、提取选项、禁止编辑 加入内容: comboBox1.Items.Add(“nnnn”); 选中某项:comboBox1.Text = comboBox1.Items0

21、.ToString(); 提取选项内容也是它 禁止编辑:dropdownstyle属性改为dropdownlist,34,版权所有,private void button1_Click(object sender, EventArgs e) string s = textBox1.Text; if (s != “) listBox1.Items.Add(s); /到后面加一行 listBox1.Items.Insert(2, “hhhhh“) /插入第2行 ,35,版权所有,ListView的使用,用于多行多列的列表。初始化时有如下一行: listView1.View = View.Detai

22、ls; 一、初始化表头,有2方法: 1、代码控制 listView1.Columns.Add( “序号“ , 50, HorizontalAlignment.Center) ; listView1.Columns.Add(“姓名“, 50, HorizontalAlignment.Center); /参数为:内容,长度,居中,36,版权所有,2、在设计时初始化 资源界面属性ColumnsCollection添加 二、添加和删除行列值 1、整体添加 /listView1.Clear(); /清除内容,包括表头 listView1.Items.Clear(); /清除内容 for (int i =

23、 0; i 10; i+) listView1.Items.Add(i.ToString(), 0); listView1.Itemsi.SubItems.Add(“00000000“); listView1.Itemsi.SubItems.Add(“11111111“); /i为行,然后依次为每行的内容,37,版权所有,2、单个修改 listView1.Items3.SubItems1.Text = “value“; /修改第3行第0 列的内容为 “value” 3、双击后获取被选项 private void listView1_Click(object sender, EventArgs

24、e) if (listView1.SelectedItems.Count = 1) string s = listView1.SelectedItems0.SubItems2.Text; MessageBox.Show(s); /得到被选行的第3个项 ,38,版权所有,模拟资源管理器的右边,39,版权所有,代码,参考ListView2,listView1.View = View.Details; listView1.Columns.Add(“名称“, this.listView1.Width / 4 + 70, HorizontalAlignment.Center); listView1.Co

25、lumns.Add(“大小“, this.listView1.Width / 4 - 36, HorizontalAlignment.Center); listView1.Columns.Add(“类型“, this.listView1.Width / 4 - 36, HorizontalAlignment.Center); listView1.Columns.Add(“修改时间“, this.listView1.Width / 4 - 8, HorizontalAlignment.Center); string path = “D:C#“; DirectoryInfo di = new Di

26、rectoryInfo(path); foreach (DirectoryInfo d in di.GetDirectories()/如果为目录 ListViewItem lvi = this.listView1.Items.Add(d.Name, 0); lvi.SubItems.Add(“); lvi.SubItems.Add(“目录“); lvi.SubItems.Add(d.LastAccessTime.ToString(); foreach (FileInfo f in di.GetFiles()/如果为文件 ListViewItem lvi = this.listView1.Ite

27、ms.Add(f.Name, 0); lvi.SubItems.Add(f.Length.ToString(); lvi.SubItems.Add(“文件“); lvi.SubItems.Add(f.LastAccessTime.ToString(); ,40,版权所有,树形控件TreeView,注意到资源管理器了吗,左边是树,右边是列表 一个TreeView控件显示Node对象的等级体系结构,每个Node对象包含了一个标签和可选的点位图。TreeView控件通常用于显示文档头、索引中的条目、磁盘上的文件和目录或者可以显示为等级结构的各种其他信息。,41,版权所有,像资源管理器初始化,usin

28、g System.IO; /放前面 string p=Directory.GetLogicalDrives(); foreach (string d in p) treeView1.Nodes.Add(d); ,42,版权所有,增加图标,43,版权所有,增加图标,44,版权所有,45,版权所有,添加代码到初始化的地方,treeView1.ImageList = imageList1;/关联图标 treeView1.SelectedImageIndex = 1;/选择时显示 treeView1.ImageIndex = 0;/正常时显示 /枚举每个驱动器 string p=Directory.G

29、etLogicalDrives(); foreach (string d in p) /加入节点 treeView1.Nodes.Add(d); ,46,版权所有,3.2 窗体,3.2.1 窗体的创建 创建窗体可以有两种方法:一种是手动创建,即直接编写代码,一种是用项目模板来创建。无论怎样创建,都要用到.NET框架的System.Windows.Forms命名空间和System.Windows.Forms.Form类。,47,版权所有,48,版权所有,整个的代码,private void button1_Click(object sender, EventArgs e) treeView1.I

30、mageList = imageList1; treeView1.SelectedImageIndex = 1; treeView1.ImageIndex = 0; string p=Directory.GetLogicalDrives(); foreach (string d in p) treeView1.Nodes.Add(d); private void mySelect(object sender, TreeViewEventArgs e) try TreeNode tree = (TreeNode)e.Node; DirectoryInfo di = new DirectoryIn

31、fo(tree.FullPath); foreach (DirectoryInfo d in di.GetDirectories()/如果为文件夹 tree.Nodes.Add(d.Name); catch ,49,版权所有,完整代码见TreeView的使用,50,版权所有,大作业:我的资源管理器,51,版权所有,3.2.2 窗体的属性和方法 窗体的属性决定了窗体的外观和操作。下面是窗体的一些主要属性: (1)Text:用来指定窗体的标题内容。 (2)Size和StartPosition:用来指定窗体显示的大小和位置。 (3)ForeColor:用来更改窗体内所有控件默认前景色。 (4)For

32、mBorderStyle:用来指定窗体的边框类型。 (5)MinimizeBox和MaximinzeBox:指定窗体是否显示最小化、最大化按钮。 (6)TopMost:用来指定窗体是否应显示为应用程序的最顶层窗体。 (7)WindowState:用来指定窗体运行时的状态。 (8)Opacity:用来指定窗体的不透明度级别(0.01.0)。 (9)Icon:用来指定窗体的图标。,52,版权所有,窗体的常用方法有: (1)Acitvate():激活窗体使其获得焦点。 (2)BringToFront()和SendToBack():将某个窗体置于Z顺序的前面(或后面)。 (3)Close():关闭窗体

33、。 (4)Contains():判断指定控件是否为窗体的子控件。 (5)GetChildAtPoint():检索位于指定位置处的子控件。 (6)GetNextControl():按照窗体上子控件的Tab顺序向前或向后检索下一个控件。 (7)Hide():隐藏窗体。 (8)Invalidat():使窗体的特定区域无效并发送重新绘制消息。 (9)Refresh():强制控件使其工作区无效并立既重绘自己和任何子控件。 (10)ResetXXX():将XXX属性重置为其默认值。(11)Show()和ShowDialog():Show()和ShowDialog()都可以用来显示窗体。 前者为非模式,后者

34、为模式对话框,53,版权所有,3.3 对话框,对话框是一种简单的窗口,主要用于向用户显示提示信息或接受用户输入的信息。在C#提供了一些标准的对话框供用户使用。对话框与窗口的不同,主要是对话框可以处于模态状态。处于模态的对话框,要求用户必须作出响应,否则无法激活其他窗口。,54,版权所有,3.3.1 消息对话框 消息对话框是最简单的一类对话框,用来显示一些提示、警告等信息。在.NET框架中,使用MessageBox类来封装消息对话框,但它不能创建MessageBox实例,而只能调用其静态成员方法Show显示消息对话框 。,55,版权所有,例如,下面代码运行结果如图所示。 MessageBox.S

35、how(“你喜欢Visual C#.NET吗?“);,56,版权所有,例如下面的代码,其运行结果如图所示。 if(DialogResult.Yes=MessageBox.Show( “退出吗?“, “提问“, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1 ) Application.Exit();/退出应用程序 ,57,版权所有,3.3.2 通用对话框 在Windows应用程序中,经常进行打开或保存文件、选择颜色或字体、打印文档等操作。.NET框架中System.Windows

36、.Forms命名空间中为这些操作提供了一组标准用户界面对话框,它们称为“通用对话框”,并有相应的通用对话框类支持,它们都是从一个公共的基类System.Windows.Forms.CommonDialog派生而来的。,58,版权所有,59,版权所有,3.3.3 自定义对话框 用户可以根据自己的需要创建对话框。自定义的对话框实际上也是窗体。作为对话框的窗体在外观上与一般的窗体在外观上是有所区别的,对话框没有控制菜单及最大化和最小化按钮,不能改变大小,多以模态方式显示,以防止用户在对话框外执行任务。,60,版权所有,步骤1,61,版权所有,在主窗口上添加代码,login = new FormLog

37、in();/设窗口名为此类 login.ShowDialog();/模式 login.Show ();/非模式,二选一,62,版权所有,【案例3-4】设计一个登录程序。 登录窗口是很多应用系统中不可缺少的组成部分。通过验证用户输入的用户名和密码,决定是否允许用户进入系统,可在一定程度上保证系统的安全。,63,版权所有,主窗口中代码,FormLogin login; public Form1() InitializeComponent(); / 窗口的初始化 login = new FormLogin(); login.ShowDialog(); ,64,版权所有,子窗口中代码,public p

38、artial class FormLogin : Form public bool isOk=false; public FormLogin() InitializeComponent(); private void BOk_Click(object sender, EventArgs e) if (textKey.Text = “88888888“ /不是,退出应用程序 ,65,版权所有,3.5 菜单和多文档界面(不要求),3.5.1 菜单 Windows 窗体上的菜单是使用 MainMenu 对象创建的,该对象是一个 MenuItem 对象集合。可以在设计时向 Windows 窗体添加菜单

39、,方法是添加 MainMenu 组件然后使用菜单设计器向其追加菜单项。还可以用编程方法添加菜单,方法是向 Windows 窗体添加一个或多个 MainMenu 对象并向该集合中添加 MenuItem 对象。,66,版权所有,1菜单的主要属性 (1)MainMenu的属性 MenuItems:获取一个值,通过该值指示与菜单关联的 MenuItem 对象的集合。通过集合类的通用操作方法Add、AddRange等可以用来添加菜单项。 RightToLeft:获取或设置控件显示的文本是否从右向左显示。 (2)MenuItem的主要属性 Checked:获取或设置一个值,通过该值指示选中标记是否出现在菜

40、单项文本的旁边。 Index:获取或设置一个值,通过该值指示菜单项在其父菜单中的位置。 IsParent:获取一个值,通过该值指示菜单项是否包含子菜单项。 MenuItems:获取一个值,通过该值指示与菜单关联的 MenuItem 对象的集合。 MergeOrder:获取或设置一个值,通过该值指示菜单项与另一个项合并时的相对位置。,67,版权所有,MergeType:获取或设置一个值,通过该值指示该菜单项的菜单与另一个菜单合并时该菜单项的行为。 Mnemonic:获取一个值,通过该值指示与此菜单项关联的助记字符。 MdiList:获取或设置一个值,通过该值指示是否使用在关联窗体内显示的多文档界

41、面 (MDI) 子窗口列表来填充菜单项。 RadioCheck:获取或设置一个值,通过该值指示 MenuItem(如果已选中)是否显示单选按钮而不是选中标记。 Shortcut:获取或设置一个值,通过该值指示与菜单项关联的快捷键。 ShowShortcut:获取或设置一个值,通过该值指示与菜单项关联的快捷键是否在菜单项标题的旁边显示。 Text:获取或设置一个值,通过该值指示菜单项标题。 Visible:获取或设置一个值,通过该值指示菜单项是否可见。,68,版权所有,2菜单的事件 在菜单类Menu、MainMenu和MenuItem中,只有MenuItem类具有事件。常用的事件有Click、P

42、opup和Select。 (1)Click事件。当单击菜单项或使用为该菜单项定义的快捷键或访问键选择菜单项时发生。 (2)Popup事件。在显示菜单项的菜单项列表之前发生。 (3)Select事件。当用户将光标放在菜单项上时发生。,69,版权所有,3使用菜单设计器创建菜单的一般步骤 (1)在设计时向 Windows 窗体添加菜单。 (2)添加菜单项。 (3)修改和删除菜单项。 (4)添加分隔符和快捷键。 (5) 为菜单项的Click事件添加代码。,70,版权所有,3.5.2 多文档界面 1多文档界面的特性 所有子窗体均显示在MDI父窗体的工作区中。用户可以改变子窗体大小或移动子窗体,但被限制在

43、MDI父窗体中。 当最小化MDI子窗体时,它的图标将显示于MDI父窗体上而不是在任务栏中。当最小化MDI父窗体时,所有的子窗体也被最小化,只有MDI父窗体的图标出现在任务栏。 当最大化一个MDI子窗体时,它的标题与MDI父窗体的标题一起显示在MDI父窗体的标题栏上。 MDI父窗体和MDI子窗体都可以有自己的菜单,当子窗体被加载时,其上的菜单可以按指定的方式与父窗体的菜单合并。,71,版权所有,2与多文档界面有关的属性、方法和事件 (1)常用的MDI父窗体的属性 ActiveMdiChild:表示当前活动的MDI子窗体。 IsMdiContainer:获取或设置窗体是否为MDI父窗体。 MdiC

44、hildren:以数组形式返回MDI子窗体。 (2)常用的MDI子窗体的属性: IsMdiChild:获取或设置窗体是否都为MDI子窗体。 MdiParent:指定子窗体的MDI父窗体。 (3)与多文档界面有关的方法和事件 与多文档界面有关的方法,主要是父窗体的LayoutMdi方法,该方法的调用格式如下: MDI父窗体名.LayoutMdi(Value);,72,版权所有,3菜单合并 父窗体和子窗体可以使用不同的菜单,这些菜单会在打开子窗体时合并。可以通过设置MergeOrder属性和MergeType属性指定合并的方式。 (1)MergeOrder:用来确定当两个菜单合并时菜单项出现的顺序,具有较低MergeOrder的菜单项会首席出现。 (2)MergeType:当合并的两个菜单的某些菜单项的MergeOrder属性值相等时,使用该属性可以控制这些菜单项的显示方式。,73,版权所有,生成随机数,Random rd = new Random(); int crc=new int1024; for (int i = 0; i 1024; i+) crci =rd.Next();,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1