第三章:菜单栏、工具栏及窗体布局
第三章:菜单栏、工具栏及窗体布局
本章目标
- 掌握Windows常用的菜单控件和工具栏控件
- 会使用基本控件对窗体进行布局
本章内容
菜单和工具栏
菜单控件:MenuStrip
普通菜单项:ToolStripMenuItem
命名规则:tsmi开头
常用属性:
DisplayStyle:显示方式(文本,图像或文本及图像)
- ImageAndText(默认)
- Image
- Text
Image:图片
内容分割线:ToolStripSeparator
为各级菜单添加分隔符
菜单快捷键
菜单的快捷键:&+字母,例如:&F
ShortcutKeys:设置快捷键
ShowShortcutKeys:是否显示快捷键
工具栏:ToolStrip
作用:
在此容器中,我们可以添加多个子控件,按钮、标签、分割符、下拉框、文本框、进度条等控件,通常为与页面顶部,通过设置其Dock属性可以控制其横向排列、纵向排列等。
- 实现效果图:
- 控件效果:
- 常用属性:
属性名称 | 说 明 |
---|---|
DisplayStyle | 是否显示图像和文本 |
Image | 将显示的图像 |
ImageScaling | 是否调整图像大小 |
TextImageRelation | 图像与文本的相对位置 |
多控件绑定同一事件:
状态栏:StatusStrip
作用:
主要是用来展示程序运行时的信息的,通常位于整个页面的最底部,可以在控件中添加四种其他子控件:标签、进度条和两种按键,可以单独在在程序中编辑每一个子控件的信息值。
使用:
Word界面底部的信息展示栏就可以看作是StatusStrip控件。
具体实现:
快捷菜单:ContextMenuStrip
作用:
通常与某个控件的MouseDown(鼠标按下)事件绑定,然后显示一个菜单选项栏,以执行不同的操作。
注意事项:
当右键和那个控件关联,则设置该控件的ContextMenuStrip属性为指定右键菜单关联。
或代码实现关联绑定,在指定控件的MouseClick事件中写下如下代码:
1 | private void FrmAdd_MouseClick(object sender, MouseEventArgs e) |
布局窗体中的控件
为什么要布局窗体?
不美观,不友好,如下图:
用VS排列窗体的控件
工具:Visual Studio的“格式” 菜单
锚定控件:Achor属性
作用:
固定控件与窗体边缘的距离。
经验:
按住Ctrl键选择多个控件,再设置Anchor属性,可以一次锚定多个控件
停靠控件:Dock
作用:
将控件停靠在窗体的边缘或填充窗体。
经验:
当某控件需要充满整个窗体时,设置控件的Dock属性是最快捷的方式
MDI模式窗体
作用:
在 MDI 应用程序中可以同时打开多个文件
创建步骤:
创建父窗体,设置父窗体的 IsMDIContainer 属性设为true,可见窗体效果有变化。
子窗体的 MdiParent 属性设为父窗体
1
2
3
4//打开学生管理
FrmStudent frm = new FrmStudent();
frm.MdiParent = this;//指定打开窗体的父窗体为本窗体
frm.Show();注意:
在MDI模式中,不能使用ShowDialog()方法,会报错。
建立子窗体窗口列表的步骤
设置父窗体菜单控件的 MdiWindowListItem 属性,选定为“窗口”菜单项
问题:如何关闭父窗体中打开的所有子窗体?
1
2
3
4
5
6
7private void tsmiClose_Click(object sender, EventArgs e)
{
foreach (Form frm in this.MdiChildren)//可循环获取MDI的子窗体
{
frm.Close();//关闭窗体
}
}
ADO.NET实现具体操作
功能描述:实现对管理员的添加功能
设置界面,界面如下:
给“添加按钮”加入点击事件:
实现验证功能(非空验证)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20/// <summary>
/// 写一个验证方法,验证界面输入
/// </summary>
/// <returns></returns>
private bool CheckInput()
{
if (txtLoginId.Text.Trim() == "")
{
MessageBox.Show("请输入账号!", "验证提示");
txtLoginId.Focus();
return false;
}
if (txtPwd.Text.Trim() == "")
{
MessageBox.Show("请输入密码!", "验证提示");
txtLoginId.Focus();
return false;
}
return true;
}实现添加功能:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31private void btnAdd_Click(object sender, EventArgs e)
{
if (CheckInput()==true)//验证成功,则实现添加功能
{
//ADO.NET实现增加
string connString = "server=.;database=MySchool;uid=sa;pwd=sa;";
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
string sql = "insert into Admin(LoginId,LoginPwd)values(@LoginId,@LoginPwd)";
SqlCommand cmd = new SqlCommand(sql, conn);
SqlParameter[] sqlParameters = {
new SqlParameter("@LoginId", txtLoginId.Text),
new SqlParameter("@LoginPwd",txtPwd.Text)
};
cmd.Parameters.AddRange(sqlParameters);//添加参数
int count=cmd.ExecuteNonQuery();
if(count > 0)
{
MessageBox.Show("添加成功");
}
else
{
MessageBox.Show("添加失败");
}
}
}
}
ComboBox数据填充
问题:如何读取年级信息添加到年级组合框中?如下图:
具体实现方式有二种
方式一:
处理窗体的Load事件使用DataReader读取年级记录添加ComboBox的项
cboGrade.Items.Add( 要添加的项 );
在第一项位置增加“请选择”的提示
cboGrade.Items.Add("请选择");
具体实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18private void FrmStudent2_Load(object sender, EventArgs e)
{
string connString = "server=.;database=MySchool;uid=sa;pwd=sa;";
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
string sql = "select gradeId,gradeName from Grade";
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader sqlDataReader = cmd.ExecuteReader();
while (sqlDataReader.Read())
{
cboGrade.Items.Add(sqlDataReader["gradeName"]);
}
sqlDataReader.Close();
}
}问题:如何要获取年级的主键GradeId进行操作,则又要从数据库查询出来,则比较麻烦,此方式不推荐。
方式二:
加载数据,通过DataTable方式实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18private void FrmStudent2_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
string connString = "server=.;database=MySchool;uid=sa;pwd=sa;";
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
string sql = "select gradeId,gradeName from Grade";
SqlDataAdapter sda=new SqlDataAdapter(sql,conn);
sda.Fill(dt);//填充表格
cboGrade.DisplayMember = "gradeName";//指定下拉列表显示数据的列名
cboGrade.ValueMember = "gradeId";//指定下拉列表值的列名
cboGrade.DataSource = dt;//将表格数据绑定到下拉列表的数据源里
}
}获取绑定的Value
1
cboGrade.SelectedValue;
课后作业
1.实现学生登录功能(跳转到MDI主窗体)
2.实现查看所有学生信息
包含:学号、姓名、性别、身份证
显示方式:RichTextBox
查询方式:读取器
3.实现删除科目
显示:组合框显示科目信息
提示:获取选中的值进行删除