《使用C#语言开发数据库应用系统》学习笔记

《使用C#语言开发数据库应用系统》
第一章
1.forms        窗体
2.partial      部分
3.event        事件
4.message       消息
5.icon         图标
6.label        标签
7.combo        组合

第二章
1.anchor       抛锚
2.dock         码头
3.application  应用程序
4.exit         退出
5.menu         菜单
6.tool         工具
7.strip        剥,剥去

第三章
1.image        图片
2.list         名单
3.view         查看
4.detail       细节
5.range        范围
6.context      上下文
7.computer     计算机

第四章
1.enum         枚举
2.gender       性别
3.male         男
4.female       女性
5.picture      图片
6.timer        定时器
7.about        关于

第五章
1.data         数据
2.set          设置
3.adapter      适配器
4.fill         填充
5.source       来源
6.property     属性
7.grid         网格
8.collection   集合
9.visible      可见

第六章
1.split        分裂
2.container    容器
3.panel        面板
4.tree         树
5.node         点
6.collection   集合
7.after        在…后面
8.filter       过滤器
9.cell         单元,细胞

第八章
1.super        不重要的角色,冗员
2.market       市场
3.commodity    商品
4.management   管理
5.system       系统
6.reduce       减少
7.discount     折扣

初识Windows程序
本章技能目标
1.掌握Windows程序的开发步骤
2.使用基本控件设计窗体
3.编写简单的事件处理程序
4.使用ExecuteScalar()方法查询数据

★1.第一个Windows程序
.NET Framework提供了Windows窗体以及窗体内常用的“控件”给开发人员使用,让开
发人员可以在编写极少量代码的情况下就能够创建出功能丰富的应用程序。

★2.创建Windows程序
创建一个Windows应用程序,一共包括四步。
1.打开Visual Studio 编译器
2.选择“文件”→“新键”→“项目”命令
3.项目类型选择“Visual C#”
4.模板选择“Windows窗体应用程序”
选择好位置,为项目命名后,单击“确定”按钮。

▲左侧出现了一个“工具箱”窗口,这里面包含了很多控件,我们可以直接把它们拖
到窗体上。
▲中间的部分是窗体设计器,可以放置从工具箱中拖出的控件。
▲右下方“属性”窗口,是用来设置窗体或控件的各种属性的,后面会详细介绍。
直接按F5键运行。

★3.认识Windows程序
Windows窗体应用程序与控制台应用程序有很大区别,打开Windows窗体应用程序的解
决方案资源管理器,
1.Form1.cs:窗体文件,程序
2.Form1.Designer.cs:窗体设计文件,其中的代码是由Visual Studio自动生成的,一般
不需要修改。
3.Program.cs:主程序文件,其中包含程序入口的Main()方法。
双击打开Program.cs文件,可以看到Windows程序的Main()方法。

Main()方法中的代码也是Visual Studio自动生成的,一般情况下只会修改第三句代码,
Application.Run(new Form1());
的含义是应用程序启动时运行的窗体。
窗体设计器是我们进行窗体界面设计,拖放控件,设置窗体及控件属性时使用的,不需
要编写代码,用鼠标就可以进行可视化的操作,

public partial class Form1 : Form
这里面包含了两个新内容:partial和Form。

partial是“部分的”意思,这是.NET Framework 2.0引入的一个新特性——分布类。在C#当中
,为了方便对代码的管理和编辑,使用partial关键字可以将同一个类的代码分开放在多个
文件中,每个文件都是类的一部分代码。代码编译时,编译器再将各个分布类的代码合并
到一起处理。
Form1这个类的代码就分布在两个文件中:Form1.cs和Form1.Designer.cs

★4.Form
Form是.NET Framework定义好的一个最基本的窗体类,具有一些窗体的最基本的属性
和方法。冒号表示继承,就像是孩子可以继承父母的外貌特征,我们自己创建的窗体
都继承自Form类型,那么它就具有了Form类中定义的属性和方法,主要的属性和方法
见表
窗体的主要属性和方法
属性
Name——窗体对象的名字,用以在代码中进行标识
BackColor——窗体的背景色
BackgroundImage——窗体的背景图像
FormBorderStyle——窗体显示的边框样式,有七个可选的值,默认值是Sizable
MaximizeBox——确定窗体标题栏的右上角是否有最大化框,默认为True
ShowInTaskbar——确定窗体是否出现在Windows任务栏中,默认为True
StartPosition——确定窗体第一次出现时的位置
Text——窗体标题栏中显示的文本
TopMost——指示窗体是否始终显示在此属性未设置为True的所有窗体之上,默认为False
WindowState——确定窗体的初始可视状态,包括Normal(普通)、Maximized(最大化)、
Minimized(最小化),默认值为Normal
方法
Close()——关闭窗体
Show()——显示窗体
ShowDialog()——模式化显示窗体
Hide()——隐藏窗体

▲规范
FormBorderStyle用于设置窗体的边框样式,在设计窗体时要根据实际需要,选择适
当的属性值。如果不希望窗体运行后,用户通过鼠标拖拽改变窗体大小,在设计时
要将窗体的FormBorderStyle属性值设置为FixedSingle

★5.基本控件
▲1.标签Label
标签的主要属性
属性
Image——在标签上显示的图像
Text——在标签上显示的文本

▲2.文本框TextBox
文本框的主要属性
属性
MaxLength——指定可以在文本框中输入的最大字符数
Multiline——表示是否可在文本框中输入多行文本
PasswordChar——指示在作为密码框时,文本框中显示的字符,而不是实际输入的文本
ReadOnly——指定是否允许编辑文本框中的文本
Text——与文本框关联的文本

▲3.组合框ComboBox
组合框的主要属性
属性
Items——组合框中的项
DropDownStyle——定义组合框的风格,指示是否显示列表框部分,是否允许用户编辑
文本框部分
Text——与组合框关联的文本
SelectedIndex——当前选定项目的索引号,列表框中的每个项都有一个索引号,从0开始
SelectedItem——获取当前选定的项

▲4.按钮Button
按钮的主要属性和事件
Enable——布尔值,表示控件是否可用。True表示可用,False表示不可用,如果控件不可
用,运行后显示为灰色
Text——按钮上显示为灰色
TextAlign——按钮上文本的对齐方式

▲规范
控件命名要遵循一定的规范,比较通用的规范是:控件类名的缩写+有含义的英文单
词。例如,Button控件的缩写是btn,那么“登录”按钮就可以命名为btnLogin。关
于控件类名缩写的对照表请参考附录。

通过TextBox的BorderStyle属性可以设置文本框的边框样式,通过Button的Backgroundmage
属性设置按钮的背景。

注意最后几行的this.Controls.Add()代码,this代表当前的窗体对象,这句代码的
含义是将控件对象添加到窗体的控件集合中,这样控件才能在窗体上显示出来。

★6.事件处理
Windows的这种通过随时响应用户触发的事件,做了相应的处理就叫做事件驱动机制。
▲1.编写事件处理程序
常用的有窗体的Load事件,按钮的Click事件。

编写事件处理程序的步骤
1.单击要创建事件处理程序的窗体或控件。
2.在“属性”窗口吕单击“事件”按钮
3.单击处理的事件。
4.为处理的方法命名。
5.双击定位到事件处理方法。
6.编写处理代码。

private void btnCancel_Click(object sender,EventArgs e)
{
    this.Close();
}
事件处理方法的定义是自动生成的,它接收了两个参数。
☆1.sender是事件源,表示是谁发生了这个事件,比如在这个事件中,事件源就是按
钮。不同的控件可能会共用同一个事件处理方法,我们可以通过sender得到发生事
件的控件,这需要进行强制类型转换。
☆2.e叫做事件参数(EventArgs)对象,不同的事件会有不同的事件参数。
在方法中,只使用了一句代码实现窗体关闭。
☆3.this是一个关键字,代表当前对象。
☆4.close()方法是窗体类Form的一个方法,作用是关闭窗体。
在生成事件处理方法的时候,Visual Studio 实际上自动完成了事件注册工作,这样才
能保证事件发生调用相应的方法,打开窗体的Designer文件,可以看到事件注册的代码

this.btnCancel.Click += new System.EventHander(this.btnCancel_Click);
关于.NET的事件处理机制,我们将在第二学年的课程中详细介绍。
规范
事件处理方法的方法名是根据控件名生成的,因此在生成事件处理方法之前,应该先为
控件指定一个有意义的名字,增加代码的可读性。

MessageBox消息框
在WinForms中,消息框是一个MessageBox对象。那么,如何创建消息框呢?
这就需要使用MessageBox的Show()方法。
我们常用的消息框有以下四种类型。

★7.MessageBox消息框
在WinForms中,消息框是一个MessageBox对象。那么,如何创建消息框呢?这就需要
使用MessageBox的Show()方法。我们常用的消息框有以下四种类型。
1.最简单的消息框,如:
MessageBox.Show(要显示的字符串);

2.带标题的消息框,如:
MessageBox.Show(要显示的字符串,消息框的标题);

3.带标题,按钮的消息框,如:
MessageBox.Show(要显示的字符串,消息框的标题,消息框按钮);

★8.用户输入验证
用户登录时,需要输入用户名的密码,这时需要程序检查用户输入的是否符合要求。这
是我们在界面设计阶段要进行的一项重要任务。常见的操作如下。
1.检查必填项或必选项是否填写或选择了数据。
2.如果没有填写或选择,弹出消息框进行提示。
3.提示后将光标定位在需要用户操作的地方。
分析
判断用户名、密码是否为空,是否选择登录类型需要编码获得TextBox或ComboBox的Text
属性值。
定位光标,可以调用控件的Focus()方法。

问题:判断空字符串时,string.Empty与null的区别是什么?
解答:string.Empty表示空字符串,即字符串对象中不包含任何字符,而null表示空
引用,即不引用任何对象。

规范
1.用户可能在输入时无意多输入了空格,因此需要调用Trim()方法进行去空格处理。
2.为了提高程序的运行效率,同时避免出现不必要的错误,在判断字符串是否为
空字符串(字符串内没有内容)时,推符使用string.Empty。

技巧
用户可能习惯使用Tab健在窗体的输入框之间跳转,最好按照从上到下、从左到右
的顺序来设置输入控件的Tab键顺序。设置的方法是:切换到窗体设计器视图,选
择“视图”菜单下的“Tab键顺序”选项,设置完毕后,取消选择该选项。

★9.窗体间的跳转
用户输入验证成功后,下一步应该是到数据库中验证用户是否存在,这些我们将在下一
节实现。现在假设用户存在,登录后应该跳转到主窗体。Form类提供了两个方法用来显
示和隐藏窗体,分别是Show()方法和Hide()方法。
下面我们就来实现从登录窗体到管理员主窗体的跳转,实现步骤如下。
1.新增管理员主窗体FrmAdminMain:在解决方案资源管理器中,右键单击项目名称,
添加一个“AdminForm”文体夹,右键单击该文件夹,添加一个Windows窗体。
2.处理登录窗体中“登录”按钮的单击事件,当登录类型为管理员时,跳转到管理员
主窗体。
//显示系统管理员主窗体
if(this.cboLoginType.Text.Equals(ADMIN))
{
    FrmAdminMain frmAdmin = new FrmAdminMain();
    frmAdmin.Show();
}
//隐藏登录窗体
this.Hide();

★10.综合案例
1.实现用户登录
问题
实现MySchool管理员的完整登录功能,如果输入的用户名和密码在数据库中不存
在,则弹出相应的提示,如果存在,跳转到管理员主窗体。
分析
使用ADO.NET操作数据库。可以使用Command对象的ExecuteScalar()方法查询数
据库中是否存在与输入的用户名和密码相同的记录。

本章总结
1.使用窗体的属性设计窗体,窗体常用的属性有FormBorderStyle、Icon、StartPosition等。
2.使用标签Label、文本框TextBox、组合框ComboBox、按钮Button设
计窗体界面,这些控件有通用的属性,例如Name、Text、Enable也有各自特有的属性。
3.编写事件处理程序:我们要做的是针对感兴趣的事件编写适当处理方法。
4.使用MessageBox弹出四种消息框,使用DialogResult获得消息框的返回值。
5.使用窗体的Show()方法和Hide()方法实现窗体的跳转。
6.结合ADO.NET和WinForms编写简单的数据库处理程序。

第二章

构建布局良好的Windows程序

本章技能目标
1.会使用基本控件设计窗体,并合理布局
2.使用窗体构建MIDI应用程序
3.使用ComboBox显示数据库中的数据
4.使用ADO.NET将窗体中的数据保存到数据库

★1.使用菜单栏和工具栏
菜单Menu最初是指餐馆提供的列有各种菜肴的清单。在计算机应用中,则是指应用
程序运行中出现在界面上的选项列表,以供用户选择执行。在可视化程序中,借助菜单
栏可以将应用程序所提供的各种功能——呈现给使用者。
工具Tool是我们工作生活中不可缺少的。在Windows程序中,工具栏是综合各种工
具让用户方便使用的一个区域。

★2.Windows中的菜单栏和工具栏
菜单栏包含的每一项都是顶层菜单项,顶层菜单项下的选项称为“子菜单”或“菜单项”

★3.使用菜单栏控件MenuStrip
MenuStrip控件的主要属性
属性
Name——代码中菜单对象的名称
Items——在菜单中显示的项的集合
Text——与菜单相关联的文本

菜单项的主要属性
属性
Name——代码中菜单对象的名称
Items——在子菜单中显示的项的集合
Text——与菜单相关联的文本
事件
Click——选中该菜单项时,触发该事件
创建菜单的步骤如下。
1.切换到窗体设计器。
2.在工具箱中,展开“菜单和工具栏”选项卡。
3.选中MenuStrip。
4.单击窗体。
5.添加菜单项
6.设置菜单项的属性和事件。

管理员窗体属性的设置
属性
Name——FrmAdminMain——窗体对象的名称
Text——MySchool-管理员——窗体标题显示的文字
WindowState——Maximized——窗体出现时是最大化的

现在我们就向窗体添加菜单
1.切换到FrmAdminMain的设计器窗口。
2.将MenuStrip控件从工具箱拖放到窗体上。MenuStrip控件将自动停靠在窗体的顶
端,并在窗体下方的区域中添加一个代表菜单的图标。
3.选中窗体下方的menuStrip1菜单控件,在“属性”窗口中将它的Name属性改为
msAdmin。
4.添加菜单项。选中msAdmin菜单控件,会发现在窗体的顶部出现了一个灰色的区
域,并包含一个标记为“请在此处键入”的方框,单击整个方框,输入文本就添加了
一个顶层菜单。当新的菜单项添加到菜单栏上之后,在它的右侧和下面会出现两个
“请在此处键入”的方框,我们可以继续添加菜单项,所有的菜单项添加完后。
5.设置菜单项的属性。每个菜单项都有最基本的Name属性和Text属性。Name属性
按编码规范设置为一个有意义的对象名称,并以tsmi作为前缀,Text属性就是菜单
项上显示的文字。
6.处理菜单项事件。当用户选择“退出”时,我们让程序退出。选中“退出”菜单
项,在“属性”窗口中切换到事件列表,找到Click事件。

Application.Exit()和Form.Close()的区别

Application.Exit()
应用程序类Application的静态方法,用于退出当前应用程序
如果当前应用程序打开了多个窗体,则关闭所有窗体
关闭窗体时,不会触发窗体的FormClosing和FormClosed事件
Form.Close()
窗体类Form的实例方法,用于关闭当前窗口;
如果当前窗体是系统启动窗体,则执行该方法关闭窗体后,应用程序退出
如果当前应用程序打开了多个窗体,只关闭当前窗体
关闭窗体时,会触发窗体的FormClosing和FormClosed事件

窗体中菜单的每个菜单项后都有一个字符,当按下组
合键Alt加该字母之后,会打开相应的菜单,如按下Alt+F会打开“文件”菜单项,
如果在我们的系统中也实现这样的菜单快捷键功能,是不是能在很大程度上提高系统使
用的方便性呢?
在.NET的MenuStrip控件中,只要两步就能很容易地实现这样的效果。
1.选择要添加快捷键的菜单项。
2.在菜单项文本的后面输入&加快捷键字母。

▲规范
菜单栏和菜单项的命名规则如下。
1.为菜单设置Name属性时,加前缀ms,如msUser,msAdmin等。
2.为菜单项设置Name属性时,加前缀tsmi,如tsmiAddStudentUser、tsmiExit等。

▲经验
快速添加分隔菜单项的方法:单击“请在此处键入”的方框,在方框中输入“-”,
该菜单项就是分隔菜单项。

★4.使用工具栏控件ToolStrip
ToolStrip的主要属性
属性
ImageScalingSize——工具栏中的项显示的图像的大小
Items——在工具栏上显示的项的集合

工具栏上的按钮和标签的主要属性和事件
属性
DisplayStyle——设置图像和文本的显示方式,包括显示文本、显示图像、显示文本和图像或
什么都不显示
Image——按钮/标签上显示的图片
ImageScaling——是否调整按钮/标签上显示的图片大小
Text——按钮/标签上显示的文本
TextImageRelation——按钮/标签上图像与文本的相对位置
事件
Click——单击按钮/标签时,触发该事件

1.从工具箱中拖出一个工具栏控件。






















































第一章PPT中的重点:
//省略引入命名空间部分
namespace MyForm
{
  static class Program
  {
    ……..    
    static void Main( )
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
  }
}

partial让程序更清晰
用 partial 将同一个窗体的代码分开放在两个文件中:
一个存放 VS 自动生成的代码
一个存放我们自己编写的代码

认识窗体类
Form 类:.NET 预定义的窗体类
Form1 继承自 Form
// Form1.cs
namespace MySchool
{
  //冒号表示继承像孩子
  //继承父母的特征所有
  //窗体都继承Form
  public partial class Form1 : Form
  {
    //构造函数做一些初始化的工作
    public Form1()
    {
      InitializeComponent();
    }        
  }
}

窗体属性
可视化设置属性,快速实现效果:
如何设置背景色?
如何设置图标和窗体标题?
如何让窗体大小固定不变?

控件命名规范
命名规范-前缀
控件名称 控件类名 命名前缀
标签    Label     lbl
文本框    TextBox     txt
组合框    ComboBox cbo
按钮    Button     btn

事件驱动机制
Windows 应用程序是事件驱动
事件驱动:随时响应用户触发的事件,做出相应的响应

我们需要做的:
针对我们感兴趣的事件,编写相应的事件处理程序

编写事件处理程序
编写事件处理程序的步骤:
1、选中控件
2、在“属性”窗口中单击
3、找到事件
4、双击生成事件处理方法
5、编写处理代码
// 关闭当前窗体
this.Close();

事件处理方法分析
private void btnCancel_Click(object sender, EventArgs e)
{
   this.Close();
}

sender 事件源:如按钮
e 事件参数
this.Close();
当前窗体 关闭窗体

练习2—取消登录
需求说明:
点击“取消”按钮时,关闭窗体

练习3—窗体变色1
窗体属性、事件处理
训练要点:
窗体属性、事件处理

需求说明:
当鼠标在窗体上点击时,窗体的背景色改变:
如果是红色,变成黄色;
如果是黄色,变成绿色,否则变成红色

练习3—窗体变色2
实现思路:
1、处理窗体的单击事件
2、编写事件处理程序

难点指导:
1、获得窗体背景颜色:this.BackColor
2、通过Color获得颜色
红色—Color.Red
绿色—Color.Green
黄色—Color.Yellow

3、判断背景颜色
if (this.BackColor == Color.Red)

友好的交互:消息框
为什么使用消息框?
显示消息
向用户请求信息

4种消息框
//最简单的消息框
MessageBox.Show("确定退出吗?");  

//带标题的消息框
MessageBox.Show("确定退出吗?", "输入提示");  

//带标题、按钮的消息框
MessageBox.Show("确定退出吗?",  "输入提示",
    MessageBoxButtons.OKCancel);  
    
MessageBoxButtons提供按钮的类型
OKCancel 表示“确定”、“取消”按钮

    
// 带标题、按钮、图标的消息框
MessageBox.Show("确定退出吗?", "输入提示",
    MessageBoxButtons.OKCancel,
    MessageBoxIcon.Information );  

MessageBoxIcon提供图标类型
Information 表示消息图标

消息框的返回值
DialogResult result = MessageBox.Show(
    "请输入用户姓名", "输入提示",
    MessageBoxButtons.OKCancel,  
    MessageBoxIcon.Information);
    
if (result == DialogResult.OK)
{
    MessageBox.Show("你选择了确认按钮");
}
else
{
    MessageBox.Show("你选择了取消按钮");
}

通过 “.”运算符取得某种消息框的结果

输入验证
如何验证用户是否输入了用户名?
// 获得文本框的值,判断是否为空
if (this.txtUserName.Text.Trim().Equals (string.Empty) )
{
  MessageBox.Show("请输入用户名", CAPTION,
  MessageBoxButtons.OK, MessageBoxIcon.Information);
  this.txtUserName.Focus();
  return false;
}

演示示例4:非空输入验证
实现窗体间的跳转
步骤:
1、定义窗体对象
2、显示窗体

定义窗体对象:
被调用的窗体类名  窗体对象 = new 被调用的窗体类名( );

显示窗体:
窗体对象 . Show( );

练习4—登录跳转
需求说明:
单击“登录”按钮时,判断输入的用户名、密码是否为空,
是否选择了登录类型,弹出相应的消息框
验证成功后跳转到相应用户的主窗体
单击“取消”按钮时,用户确定后,关闭窗体

用户验证
登录的用户是否存在?

输入验证通过后,验证用户合法性
查询数据库 Count(*)
使用ExecuteScalar()方法
private void btnLogin_Click(object sender, EventArgs e)
{
  if (CheckInput()) // 输入验证通过
  {
    if (CheckUser(ref message))  // 验证用户是否存在
    {
      // 跳转到管理员主窗体
    }    
  }
}

窗体间的数据传递
如何把登录名传递到主窗体中?
在主窗体中增加一个字段userId
在登录窗体中为userId赋值
FrmAdminMain frmAdmin = new FrmAdminMain();
//数据传递
frmAdmin.userId = txtUserName.Text.Trim();
frmAdmin.Show();
演示示例6:传递登录名                 

练习5—用户登录
需求说明:
如果用户存在,跳转到相应用户的主窗体,
并在主窗体标题处显示登录的用户名
如果用户不存在,弹出消息框

窗体的主要属性有哪些?
消息框的返回值是什么类型?
如何关闭窗体?
如何实现窗体间的跳转?

第二章PPT中的重点:
回顾与作业点评
如何弹出消息框?如何获得消息框的返回值?
如何从一个窗体跳转到另一个窗体?
如何读取数据库中多行多列的查询结果?

预习检查
本章讲了哪几个控件?
控件的Anchor和Dock属性有什么作用?

菜单栏和工具栏
Windows中的菜单和工具栏
创建管理员菜单
创建管理员菜单,并打开新增学生窗体:
普通菜单项:ToolStripMenuItem
内容分割线:ToolStripSeparator
菜单的快捷键:&+字母,例如:&F
“退出”:

Application.Exit();  // 退出应用程序
可以用this.Close()吗?

演示示例1 :创建管理员菜单

创建管理员工具栏
实现带图片的工具栏
属性名称    说  明
DisplayStyle    
是否显示图像和文本
Image    
将显示的图像
ImageScaling    
是否调整图像大小
TextImageRelation    
图像与文本的相对位置

多控件绑定同一事件处理方法

演示示例2:创建管理员工具栏

练习1—设计主窗体
需求说明:
设计管理员主窗体
设计学生用户主窗体
要求有退出功能
登录时根据登录的类型,跳转到不同的主窗体

控件进阶
设计编辑学生用户窗体:
Label、TextBox、ComboBox、Button
单选按钮:RadioButton
日期选择控件:DateTimePicker
组框:GroupBox
面板:Panel

演示示例3:设计编辑学生用户窗体

控件命名规范
命名规范-前缀
属性名称 说明 属性名称
单选按钮 RadioButton rbtn
组框 GroupBox grp
面板 Panel pnl

设计布局良好的窗体
为什么要排列控件?
不美观
不友好

用VS排列窗体的控件
工具:Visual Studio的“格式” 菜单
按住“Ctrl”键,选择多个控件
以第一个控件为基准

锚定控件
使用 Anchor

Achor属性:
固定控件与窗体边缘距离

停靠控件
Dock属性:
使用Dock
将控件停靠在窗体的边缘或填充窗体

MDI窗体
父窗口
子窗口
在 MDI 应用程序中可以同时打开多个文件

构建MDI
演示示例4 :构建MDI应用程序

MDI关键步骤
创建 MDI 的步骤:
 1、父窗体的 IsMDIContainer 属性设为true
 2、子窗体的 MdiParent 属性设为父窗体

ChildForm childForm = new ChildForm();   
childForm.MdiParent = this;   
childForm.Show();  

建立子窗体窗口列表步骤:
设置父窗体菜单控件的 MdiWindowListItem
属性,选定为“窗口”菜单项

练习2—设计编辑学生用户窗体
需求说明:
设计编辑学生用户窗体
从管理员主窗体打开该窗体
实现输入验证

练习3—设计修改密码窗体
需求说明:
设计修改密码窗体
从管理员主窗体打开该窗体
要求有输入验证:两次的新密码一致

练习4—实现修改密码功能
需求说明:
将数据库中的旧密码更新为新密码

动态向ComboBox中添加数据
如何读取年级信息添加到年级组合框中?

处理窗体的Load事件
使用DataReader读取年级
添加ComboBox的项
cboGrade.Items.Add( 要添加的项 );
演示示例5:显示年级信息

练习5—填充年级数据

练习6—实现新增学生用户功能
训练要点:
获得窗体控件的值
ExecuteScalar()方法
ExecuteNonQuery()方法
需求说明:
学生用户信息填写完整后,将信息保存到数据库
添加成功在窗体上显示生成的学号

指导—实现新增学生用户功能
实现思路:
1、用户输入验证通过(已经实现)
2、根据选中的年级名称,用ExecuteScalar()方法查询年级Id
3、用ExecuteNonQuery()方法向数据库中插入数据,性别值定义为常量
4、获得最后生成的标识列值作为学号

难点指导:
获得最后生成的标识列值:
SELECT @@IDENTITY

总结
Dock和Anchor的区别是什么?
如何构建MDI父窗体、子窗体?
如何利用代码向ComboBox中添加项?
如何确定单选按钮是否选中?

回顾与作业点评
模糊查询的查询条件如何写?
使用Command的哪个方法从数据库中查询多行多列的结果?
DataReader的使用步骤?

预习检查
ListView控件有几种视图?
ListView控件中显示的图片存放在哪里?

神奇的ListView
ListView :列表视图控件
以特定样式或视图类型显示列表项

大小图标切换
模拟“我的电脑”,实现大小图标切换
需要用到的属性
属性名称 说  明
Items ListView中的项
View 指定显示哪种视图
LargeImageList    大图标图像的
ImageList控件
SmallImageList    小图标图像的
ImageList控件

存放其他控件使用的图片
图像列表ImageList
图像列表ImageList的属性
属性名称 说  明
Images 存储的所有图像
ImageSize 图像的大小
ColorDepth 颜色数
TransparentColor 被视为透明的颜色

练习1—显示QQ好友头像和昵称
需求说明:
设计QQ好友窗体
在窗体上显示好友的头像和昵称,
能够切换大头像和小头像

ListView的详细信息视图
列的集合Columns
项的集合Items
列表视图项ListViewItem
列表视图项的子项ListViewSubItem
子项的集合SubItems

显示详细视图
模拟“我的电脑”详细视图
需要用到的属性
属性名称    说  明
Columns    详细视图中显示的列
Items    ListView中的项
演示示例2:我的电脑详细信息视图

快捷菜单ContextMenuStrip
通过快捷菜单切换视图
为控件指定快捷菜单:ContextMenuStrip 属性

演示示例3:快捷菜单切换视图

转载于:https://www.cnblogs.com/peston/archive/2012/12/16/2820122.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值