关于界面的重用性设计

原创 2006年06月05日 12:24:00

      主要做了一个基页:BasePage 在此基页上布局, default页继承它,并根据url参数,自动加载不同的处理用户控件。

1、BasePage 页:

------------------------------------------------------------------

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace PhsResManagerWebpro
{
 /// <summary>
 /// BasePage 的摘要说明。
 /// </summary>
 public class BasePage : System.Web.UI.Page
 {
  //用户控件
  protected PhsResManagerWebpro.UserControls.headermenu headermenu1;
  protected PhsResManagerWebpro.UserControls.caption caption1;
  protected PhsResManagerWebpro.UserControls.menu menu1;
  protected PhsResManagerWebpro.UserControls.cauda cauda1;

  private void Page_Load(object sender, System.EventArgs e)
  {

   LogionPage();  //也面加载
  }

  #region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
  
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {   
   this.Load += new System.EventHandler(this.Page_Load);

  }
  #endregion

  #region 页面加载

  private void LogionPage()
  {
   SetCssFile("defaultCss.css");  //设置Css样式
   SetLayout();      //页面布局
  }

  #endregion

  #region 页面布局
  /// <summary>
  /// 页面布局
  /// </summary>
  private void SetLayout()
  {
   Control Form=this.Page.Controls[1];         //页表单form对象
  
   //标题Panel创建
   System.Web.UI.WebControls.Panel PnlCaption=new Panel();
   PnlCaption.ID="PanCaption";
   PnlCaption.Width=970;
   PnlCaption.Height=80;
   PnlCaption.CssClass="panel15";
   
   //主菜单Panel创建
   System.Web.UI.WebControls.Panel PnlMainmenu=new Panel();
   PnlMainmenu.ID="PnlMainmenu";
   PnlMainmenu.Width=970;
   PnlMainmenu.Height=10;
   PnlMainmenu.CssClass="panel10";
   
   //内容框架Panel创建
   System.Web.UI.WebControls.Panel PnlMain=new Panel();
   PnlMain.ID="PnlMain";
   PnlMain.Width=970;
   PnlMain.Height=1000;
   PnlMain.CssClass="panel0";
     
   //页尾Panel创建
   System.Web.UI.WebControls.Panel pnlEnd=new Panel();
   pnlEnd.ID="pnlEnd";
   pnlEnd.Width=970;
   pnlEnd.Height=90;
   pnlEnd.CssClass="panel15";


   //加载布局
   Form.Controls.Add(PnlCaption);
   Form.Controls.Add(PnlMainmenu);
   Form.Controls.Add(PnlMain);
   Form.Controls.Add(pnlEnd);

   //导航Panel创建
   System.Web.UI.WebControls.Panel pnlMenu=new Panel();
   pnlMenu.ID="pnlMenu";
   pnlMenu.Width=250;
   pnlMenu.Height=1000;
   pnlMenu.CssClass="panel15left"; 
 
   //内容Panel创建
   System.Web.UI.WebControls.Panel pnlContent=new Panel();
   pnlContent.ID="pnlContent";
   pnlContent.Width=718;
   pnlContent.Height=1000;
   pnlContent.CssClass="panel15right"; 

   //加载内容框架布局
   PnlMain.Controls.Add(pnlMenu);
   PnlMain.Controls.Add(pnlContent);
   
   //菜单用户控件
   headermenu1=(PhsResManagerWebpro.UserControls.headermenu)this.LoadControl("UserControls/headermenu.ascx");
   //标题头用户控件
   caption1=(PhsResManagerWebpro.UserControls.caption)this.LoadControl("UserControls/caption.ascx");
   //导航菜单用户控件
   menu1=(PhsResManagerWebpro.UserControls.menu)this.LoadControl("UserControls/menu.ascx");
   //页尾 用户控件
   cauda1=(PhsResManagerWebpro.UserControls.cauda)this.LoadControl("UserControls/cauda.ascx");
   
   //加载自定义控件
   PnlCaption.Controls.Add(caption1);
   PnlMainmenu.Controls.Add(headermenu1);
   pnlMenu.Controls.Add(menu1);
   pnlEnd.Controls.Add(cauda1);

   //页面的处理控件加载
   SetContentUsercontrls(pnlContent);
  }
  #endregion

  #region Css样式加载

  /// <summary>
  /// Css样式加载
  /// </summary>
  private void SetCssFile(string strCssFileName)
  {
   string strCssUrl=@"<link href=Css/"+strCssFileName+" rel=stylesheet type=text/css>";  //Css路径
   Response.Write(strCssUrl);   //Css路径引入

  }
  #endregion

  #region 页面处理控件加载

  /// <summary>
  /// 页面的处理控件加载
  /// </summary>
  /// <param name="pnlMain"></param>
  public void SetContentUsercontrls(System.Web.UI.WebControls.Panel pnlMain)
  {
   if(Request.Params["PageName"]==null)
    return;

   string PageName=Request.Params["PageName"].ToString();  //得到请求的处理页面名称
   
   if(PageName==null || PageName=="")
    return;
   else
   {
    //根据连接串Key值,从XML里读取Value值
    DataSet ds=new DataSet();
    ds.ReadXml(MapPath("urlConfig.xml"));
    for(int i=0;i<ds.Tables[0].Rows.Count;i++)
    {
     if(ds.Tables[0].Rows[i]["key"].ToString()==PageName)
     {
      PageName=ds.Tables[0].Rows[i]["value"].ToString(); 
      break;
     }
    }
   }
 
   //加载用户控件
   Control cTemp=(Control)this.LoadControl(PageName);
   pnlMain.Controls.Add(cTemp);
  }

  #endregion

 }
}

 

urlConfig.xml文件:

-----------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<urlConfig>
 <urlItem>
  <key>WGinfoUserControl</key>
  <value>BLLUserContrls/WGinfoUserControl.ascx</value>
 </urlItem>
 
 <urlItem>
  <key></key>
  <value></value>
 </urlItem>

 <urlItem>
  <key></key>
  <value></value>
 </urlItem>
 
</urlConfig>

defaultCss.css文件:

-----------------------------------------------------

body
{
 FONT-SIZE: 14px;
 COLOR: darkslategray;
 background-color:White;
 text-align:center;
}

.panel15
{
 BORDER-RIGHT: buttonshadow 1px solid;
 BORDER-TOP: buttonshadow 1px solid;
 BORDER-LEFT: buttonshadow 1px solid;
 BORDER-BOTTOM: buttonshadow 1px solid;
 background-color: #f5f5f5;
 
 PADDING-RIGHT: 0px;
  PADDING-LEFT: 0px;
  PADDING-BOTTOM: 0px;
  PADDING-TOP: 0px;
 
 MARGIN: 2px 0px 1px;
 
 text-align:left;
}

.panel0
{
 BORDER-RIGHT: buttonshadow 0px solid;
 BORDER-TOP: buttonshadow 0px solid;
 BORDER-LEFT: buttonshadow 0px solid;
 BORDER-BOTTOM: buttonshadow 0px solid;
 background-color: #f5f5f5;
  
 PADDING-RIGHT: 0px;
  PADDING-LEFT: 0px;
  PADDING-BOTTOM: 0px;
  PADDING-TOP: 0px;
 
 MARGIN: 2px 0px 1px;
 text-align:left;
}

.panel10
{
 BORDER-RIGHT: buttonshadow 1px solid;
 BORDER-TOP: buttonshadow 0px solid;
 BORDER-LEFT: buttonshadow 1px solid;
 BORDER-BOTTOM: buttonshadow 0px solid;
 background-color: #f5f5f5;
  
 PADDING-RIGHT: 0px;
  PADDING-LEFT: 0px;
  PADDING-BOTTOM: 0px;
  PADDING-TOP: 0px;
 
 MARGIN: 2px 0px 1px;
 text-align:left;
}

.panel5
{
 BORDER-RIGHT: buttonshadow 0px solid;
 BORDER-TOP: buttonshadow 1px solid;
 BORDER-LEFT: buttonshadow 0px solid;
 BORDER-BOTTOM: buttonshadow 1px solid;
 background-color: #f5f5f5;
  
 PADDING-RIGHT: 0px;
  PADDING-LEFT: 0px;
  PADDING-BOTTOM: 0px;
  PADDING-TOP: 0px;
 
 MARGIN: 2px 0px 1px;
 text-align:left;
}

.panel15right
{
 BORDER-RIGHT: buttonshadow 1px solid;
 BORDER-TOP: buttonshadow 1px solid;
 BORDER-LEFT: buttonshadow 1px solid;
 BORDER-BOTTOM: buttonshadow 1px solid;
 background-color: #f5f5f5;
  
 PADDING-RIGHT: 0px;
  PADDING-LEFT: 0px;
  PADDING-BOTTOM: 0px;
  PADDING-TOP: 0px;
 
 MARGIN: 2px 0px 1px;
 text-align:left;
}

.panel15left
{
 BORDER-RIGHT: buttonshadow 1px solid;
 BORDER-TOP: buttonshadow 1px solid;
 BORDER-LEFT: buttonshadow 1px solid;
 BORDER-BOTTOM: buttonshadow 1px solid;
 background-color: #f5f5f5;
 float:left;
  
 PADDING-RIGHT: 0px;
  PADDING-LEFT: 0px;
  PADDING-BOTTOM: 0px;
  PADDING-TOP: 0px;
 
 MARGIN: 2px 0px 1px;
 text-align:left;
}

.panel15right
{
 BORDER-RIGHT: buttonshadow 1px solid;
 BORDER-TOP: buttonshadow 1px solid;
 BORDER-LEFT: buttonshadow 1px solid;
 BORDER-BOTTOM: buttonshadow 1px solid;
 background-color: #f5f5f5;
 float:right;
  
 PADDING-RIGHT: 0px;
  PADDING-LEFT: 0px;
  PADDING-BOTTOM: 0px;
  PADDING-TOP: 0px;
 
 MARGIN: 2px 0px 1px;
 text-align:left;
}

.ButtonCss {
    font-family: "Tahoma", "宋体";
    font-size: 9pt; color: #003399;
    border: 1px #003399 solid;
    color:006699;
    BORDER-BOTTOM: #93bee2 1px solid;
    BORDER-LEFT: #93bee2 1px solid;
    BORDER-RIGHT: #93bee2 1px solid;
    BORDER-TOP: #93bee2 1px solid;
    background-image:url(../Images/bluebuttonbg.gif);
    background-color: #e8f4ff;
    CURSOR: hand;
    font-style: normal ;
}

.TextBoxCss
{
 font-family: "Tahoma", "宋体";
    font-size: 9pt;
    color: #003399;
}
 
.InputCss { 
    font-size: 9pt;
    color: #003399;
    font-family: "宋体";
    font-style: normal;
    border-color: #93BEE2 #93BEE2 #93BEE2 #93BEE2 ;
    border: 1px #93BEE2 solid;
}

 

DefaultIndex.aspx.cs

-------------------------------------------

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace PhsResManagerWebpro
{
 /// <summary>
 /// DefaultIndex 的摘要说明。
 /// </summary>
 public class DefaultIndex :BasePage
 {
  private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放置用户代码以初始化页面
  }

  #region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
  
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {   
   this.Load += new System.EventHandler(this.Page_Load);

  }
  #endregion
 }
}

 

可重用性-一旦一个函数被写入

新的程序员经常问:“我们不能把代码里面的代码直接放在里面吗?”“在许多情况下(特别是简单的例子),它可以。然而,函数提供了一些好处,使他们非常有用的非平凡的程序。 组织程序越来越复杂,有所有的代码都...
  • shazhugw
  • shazhugw
  • 2016年08月22日 17:12
  • 505

怎么实现代码的重用性?

代码重用
  • zsyoung
  • zsyoung
  • 2016年10月14日 10:28
  • 1823

MVP模式重用性的一些思考

MVP重用性的一些思考
  • abccjf
  • abccjf
  • 2017年01月18日 18:09
  • 324

C++关于代码重用的那些事

C++的另一个目标是促进代码重用。公有继承是实现这种目标的机制之一,但并不是唯一的机制。还可以使用这样的类成员:本身是另一个类的对象,这种方法称为包含、组合或层次化。另一种方法是使用私有继承或保护继承...
  • Mr_Avin
  • Mr_Avin
  • 2017年02月17日 15:27
  • 925

软件的可维护性与可复用性

我们常说一个好的系统设计在于其有较高的可维护性和较高的可复用性。其实可维护性与可复用性是两个独立的目标,并不总是方向一致。         软件的维护就是软件的再生。一个好的软件设计,必须能够允许新的...
  • zsh2050
  • zsh2050
  • 2015年01月10日 16:01
  • 1192

几个定义: 重构 编程模式 复用 设计模式 框架

1.   重构(Refactoring)就是通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。 系统发展到一定阶段后,使用重构的方式,不改变系统的外部...
  • cyuyanchenxi
  • cyuyanchenxi
  • 2015年04月21日 10:43
  • 706

如何设计循环避免代码重复,提高代码复用性

提高代码复用性为维护性的方法有很多,比如继承,构造代码块,循环等等,本文讲的是循环。 当有很多类似的东西时,往往导致代码重复,量大,这时要想到用设计循环的方法来减少重复的代码。 为了成功地设计循环,往...
  • u014447968
  • u014447968
  • 2016年04月18日 18:18
  • 679

死锁概述与总结

一、死锁的引入顾名思义,死锁死锁肯定与锁有关,我们知道引入锁又是为了解决多进程或多线程之间的同步与互斥问题,那么到底怎样的情形才会产生死锁呢? 典型的两种死锁情形: (一)线程自己将自己锁住 一...
  • snow_5288
  • snow_5288
  • 2017年05月30日 13:34
  • 531

代码重用和接口重用

在面试中,面向对象语言中经常会提到代码重用和接口重用的概念,有些同学会很疑惑,其实仔细翻阅下书本就不难发现,代码重用就是继承父类的方法,达到方法(代码)重用的目的,而接口重用就是在多态中能够通过父类指...
  • zsczsc1011
  • zsczsc1011
  • 2015年08月27日 17:24
  • 1223

分布式系统---幂等性设计

分布式系统---幂等性设计, 高并发系统数据幂等性
  • mine_song
  • mine_song
  • 2017年07月07日 15:42
  • 913
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于界面的重用性设计
举报原因:
原因补充:

(最多只允许输入30个字)