当前位置:嗨网首页>书籍在线阅读

08-表示层设计

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

26.7 表示层设计

**本节视频教学录像:6分钟**

建立表示层Windows窗体应用程序项目,项目名称为“Stcok”。表示层采用MDI多文档界面,下面介绍各个窗体的设计。

1.主窗体设计

本系统是一个便于入门的系统,是复杂的“超市采购管理系统”的一个简化版本,主界面设计如下图所示。

在主界面Stcok窗体中添加一个toolStrip控件,用于进行操作的导航。在toolStrip上添加8个toolStripButton,分别设置每个toolStripButton的DisplayStyle为ImageAndText,然后输入相应的文字,如“增加订单”、“订单管理”、“库存管理”、“商品管理”等。

457.jpg 分别为每个toolStripButton添加单击事件处理程序,实现单击相应的按钮后,执行对应的功能。下面以“商品管理”按钮为例进行介绍,代码如下(代码26-7-1.txt)。

01  private void 商品信息管理ToolStripMenuItem_Click(object sender, EventArgs e)
02  {
03      if (Set.User.Purview == Set.Ordinarily) //判断用户权限,如果是一般则不能操作
04      {
05          MessageBox.Show("您的权限不够!");
06          return;
07      }
08      foreach (Form f in this.MdiChildren)  //判断窗体是否打开
09      {
10        if (f is frmMInfo)                  //如果打开,则激活打开的窗体
11        {
12            f.Activate();
13            return;
14        }
15    }
16    frmMInfo frm = new frmMInfo();         //如果没打开,则创建一个新窗体  
17    frm.MdiParent = this;
18    frm.Show();
19  }

2.商品管理等子窗体设计

商品信息管理frmMInfo子窗体实现显示商品信息,以及添加、修改、删除、搜索和刷新商品信息。界面如下图所示。

458.jpg 在商品信息窗体中直接输入商品名称,选择商品类型,输入日销售量。单击【添加】按钮,输入的商品信息就会添加到下面的列表中,代码如下(代码26-7-2.txt)。

01  /// <summary>
02  /// 添加商品信息
03  /// </summary>
04  /// <param name="sender"></param>
05  /// <param name="e"></param>
06  private void buttobtnAccessionn2_Click(object sender, EventArgs e)
07  {
08    try
09    {
10       checkText(); //检测用户输入
11       MerchandiseInfoData mid = new MerchandiseInfoData();//创建商品实体
12       mid.Name = this.txtName.Text; //商品名字        
13       mid.TypeID = ((MerchandiseTypeData)this.txtGenre.Tag).ID; //商品类型
14       mid.Quantity = Convert.ToInt32(this.txtQuantity.Text); //日销售量
15       mid.ID = MInfoCortrol.addMnfo(mid); //保存创建的商品实体,并获取自增的商品ID
16       addMIinfo(mid); //把新增商品放入商品列表中
17       clear();//清空输入内容
18     }
19     catch (MessageException ex) //异常处理
20     {
21        MessageBox.Show(ex.Message); //显示异常信息
22     }
23  }
01  /// <summary>
02  /// 在窗体下端商品列表中添加商品信息
03  /// </summary>
04  /// <param name="mid">商品实体</param>
05  private void addMIinfo(MerchandiseInfoData mid) //将添加的商品信息对应放入商品列表中
06  {
07    try
08    {
09       ListViewItem lvi = new ListViewItem(mid.Name); //将商品名字放入新增行的第一列
10       lvi.Tag = mid;
11       ListViewItem.ListViewSubItem lvs = new ListViewItem.ListViewSubItem();
12       MerchandiseTypeData mtd = MTypeCortrol.getMTypeOfID(mid.TypeID);
13       lvs.Text = mtd.Name; //将商品类型放入新增行的第二列
14       lvs.Tag = mtd;
15       lvi.SubItems.Add(lvs);
16       lvi.SubItems.Add(mid.Quantity.ToString());//将日销售量放入新增行的第三列
17       this.lvMType.Items.Add(lvi); //将新增行放入列表中
18    }
19    catch (MessageException ex)//异常处理
20    {   
21       MessageBox.Show(ex.Message);//显示异常信息
22    }
23  }

例如,添加商品“笔记本”。输入相关的信息,然后单击【添加】按钮,即可完成商品信息添加操作,如下图所示。

459.jpg 选中商品信息列表里面的一种商品,单击【修改】按钮,对应的商品名称、类型、销售量就会显示在列表上方的对应的空格中,代码如下(代码26-7-3.txt)。

01  private void btnAmend_Click(object sender, EventArgs e)
02  {
03    try
04    {
05       if (this.lvMType.SelectedItems.Count == 0)//判断是否有选中要修改的商品
06          throw new MessageException("请选择要修改的项目!");
07       checkText();//检测已经修改过的商品信息
08       MerchandiseInfoData mid = getMInfo();//获取修改后的商品信息
09       mid.ID = ((MerchandiseInfoData)this.lvMType.SelectedItems[0].Tag).ID; //获取修改商品的ID
10       MInfoCortrol.updMInfo(mid); //更新商品信息到数据库
11       ListViewItem lvi = new ListViewItem(mid.Name); //商品名字
12       lvi.Tag = mid; //商品ID        
13       ListViewItem.ListViewSubItem lvs = new ListViewItem.ListViewSubItem();
14       MerchandiseTypeData ptd = MTypeCortrol.getMTypeOfID(mid.TypeID);
15       lvs.Text = ptd.Name; //商品类型
16       lvs.Tag = ptd;
17       lvi.SubItems.Add(lvs);
18       lvi.SubItems.Add(mid.Quantity.ToString());//日销售量
19       this.lvMType.Items[this.lvMType.SelectedIndices[0]] = lvi; //更新商品信息列表中的内容
20       clear();
21    }
22    catch (MessageException ex)
23       {
24          MessageBox.Show(ex.Message);
25       }
26  }

例如,我们选中商品列表中的Dell电脑,可以对该商品的名称、类型、日销售量进行修改。修改完成之后,单击【修改】按钮,列表中的信息就会更新。

460.jpg 将商品信息列表中的Dell电脑的日销售量改为“5”。修改之后如下图所示。

461.jpg 在frmMInfo子窗体上单击【删除】按钮,实现删除选择商品信息的功能,代码如下(26-7-4.txt)。

01  private void btnDelete_Click(object sender, EventArgs e)
02  {
03    try
04    {
05      if (this.lvPureves.SelectedItems.Count == 0)      //选择要删除的商品信息
06      throw new MessageException("请选择要删除的项目!");
07      DialogResult dr=MessageBox.Show("您确定要删除该项目吗?", "询问",MessageBoxButtons.YesNo, MessageBoxIcon.Question);       //确认要删除的商品信息
08      if (dr != DialogResult.No)
09      {
10         PInfoCortrol.delPurveyInfo((PurveyInfoData)this.lvPureves.SelectedItems[0].Tag); 
                        //删除选定的商品信息
11         this.lvPureves.Items.RemoveAt(this.lvPureves.SelectedIndices[0]); //将列表中的商品信息删除
12         clear();
13       }
14    }
15    catch (MessageException ex)
16    {
17       MessageBox.Show(ex.Message);
18    }
19    catch (SqlException)
20    {
21       MessageBox.Show("该项目正在被使用,无法删除!");
22    }
23    catch (Exception ex)
24    {
25       MessageBox.Show(ex.Message);
26    }
27  }

接下来对frmMInfo子窗体上的【搜索】功能按钮进行介绍,代码如下(26-7-5.txt)。

01  private void button2_Click(object sender, EventArgs e)
02  {
03     try
04     {
05        frmInput fipt = new frmInput("请输入任意关键字进行搜索");
06        string str = fipt.ShowInput();
07        foreach (ListViewItem lvi in this.lvMType.Items)//遍历商品信息列表中的每一行
08        {
09             bool ok = false;
10             foreach (ListViewItem.ListViewSubItem lvs in lvi.SubItems) //遍历商品信息列表中每一行的每一列
11             {
12                  if (lvs.Text.IndexOf(str) != -1) //如果该行任意列包含关键字就保留该行
13                      {
14                           ok = true;
15                           break; ;
16                     }
17            }
18            if (ok == false) //如果该行所有列都不包含关键字就移除该行
19            this.lvMType.Items.Remove(lvi);
20         }
21         clear();
22     }
23     catch (MessageException ex)
24     {
25           if (ex.Message != "")
26           MessageBox.Show(ex.Message);
27     }
28  }

例如,要搜索关键字“电脑“,单击【搜索】按钮,在弹出的对话框中输入关键字“电脑”,如下图所示。

462.jpg 列表中就会显示商品信息中含有关键字“电脑”的所有商品,如下图所示。

463.jpg 其他功能模块和商品管理模块类似,详见源程序。