一步一步学习Winform系列5:主窗体界面的设计和完善
1、主窗体设计
说明:本课主要是对界面的完善与设计,你可以在此下载相关的图片素材。
主窗体,顾名思义就是软件的操作主界面,他会有菜单、导航、选项卡等等。我们的基本信息管理模块就只是主窗体中的一个菜单而已。因此,试着设计一个主窗体吧。
为CSS项目添加一个窗体,命名为Mianform,设置属性设置
WindowState属性改为Maximized
IsMidconainer属性改成true
拖入菜单控件,设置相应的菜单。效果如图:
灰色区域就是子窗体停靠的地方了。
我们从最简单的做起,添加【关于我们】的窗体。
右键添加一个文件夹命名为帮助,添加一个关于的窗体,可以修改一下图片,然后打开本项目内的AssemblyInfo.cs文件,修改里面的变量。会被直接反应在关于窗体的菜单中。
回到Mainform界面,我们需要为【关于我们】的菜单添加一个跳转事件
//点击菜单:关于我们,在主界面上弹出关于我们的对话框 //注意:这个窗体直接从properties/AssemblyInfo.cs中取值 private void 关于我们ToolStripMenuItem_Click(object sender, EventArgs e) { Form about = new 关于我们(); about.MdiParent = this;//这一句话表明了关于我们的窗体与本窗体之间的父子关系 about.Show(); }
运行看看,这个效果
那么我们的基本信息维护菜单的点击与跳转就可以以此类推了。
顺便一提,帮助文档的打开与设置。
复制一个CssHelp.chm文件到NorthwindCSS\NorthwindCSS\bin\Debug目录下(这个目录是项目启动目录,你会留意到经过调试后这个项目内一直有NorthwindCss.exe。等会我们打包的时候需要用到它)
两种方法可以实现打开chm文件。
方法1:为菜单的点击事件启动进程,直接打开文件
//点击菜单:帮助文档,不借助helpProvider控件的另一种方法 private void 帮助文档ToolStripMenuItem_Click(object sender, EventArgs e) { string strFile = Application.StartupPath + "\\CssHelp.CHM"; System.Diagnostics.Process.Start(strFile); }
方法2:借助HelpProvider控件,可以相应F1快捷键
//添加帮助F1快捷键 private void MainForm_Load(object sender, EventArgs e) { helpProvider1.HelpNamespace = Application.StartupPath + "\\CssHelp.CHM"; helpProvider1.SetShowHelp(this, true); }
再拖入状态栏StatusStrip控件就比较专业了。这时窗体底部显示的有:
在窗体加载事件设置,显示当前系统时间。
//添加帮助F1快捷键 private void MainForm_Load(object sender, EventArgs e) { helpProvider1.HelpNamespace = Application.StartupPath + "\\CssHelp.CHM"; helpProvider1.SetShowHelp(this, true); //设置状态栏上的一个Label为当前的系统时间 statusTimeInfo.Text = "今天是 " + System.DateTime.Now.ToShortDateString(); }
运行后效果是
附加作业:请大家参考以下的界面继续完善本系统的主窗体。图片素材已下发,这里的控件为ToolStrip。
至此,我们完成了主窗体的优化。
//点击菜单:维护主界面,在主界面上弹出基本信息维护主界面
private void 维护主界面ToolStripMenuItem_Click(object sender, EventArgs e)
{
//申明子窗体
Form BaseInfo = new 基本信息管理主界面();
BaseInfo.MdiParent = this;
//定义子窗体启动就是最大化
BaseInfo.WindowState = FormWindowState.Maximized;
BaseInfo.Show();
}
下一节课我们准备学习多重搜索的实现,请大家根据讲义的设置先完成以下界面
将这个窗体的弹出写在主界面的按钮事件上
private void tsBtn检查可用产品_Click(object sender, EventArgs e) { Form 查看可用产品 = new 查看可用产品(); //查看可用产品.MdiParent = this; 查看可用产品.WindowState = FormWindowState.Maximized; //查看可用产品.Show(); //调用子窗体实例化函数,确认该窗体只被实例化一次 CommonFunc.CheckChildOpenState(this, 查看可用产品); }
为了保证该窗体中的控件能跟随Form的最大化而自动布局,这里需要设置两个groupBox的Anchor属性为Top, Left, Right(同时设置左右,就可以保证跟随窗体自动拉伸)。
如果需要响应用户回车就能搜索,那么可以讲这个窗体的acceptButton设置为btn搜索。