C# C/S结构数据库系统框架详解(一)[vjsdn]自发布《多文档界面(MDI)系统框架-C#完整版》后又有了新想法,就是再写个C#版C/S结构系统框架。
因时间关系断断续续写了很久。
借周日机会,我将源代码整理好再写些说明文档发布出来,希望给大家带来学习机会。
特别声明的是: C/S结构系统框架是优化和改编自几个大型系统,是经历过考验和实际应用的。
希望大家好好珍惜。
这个框架有很多学习要点,提醒大家不仅仅是下载代码而应该去好好研究,甚至阅读每一行代码每一个模块每一个细节! 你学会了它也许将来作为一个优秀架构师需要设计同样一个系统时,这时你用上它,不是事半功倍么?另外,请尊重作者版权,写一个框架的确需要大量时间和精力。
程序员有个共性是写作永无止境,虽是深夜2点,但我们仍在思考,仍在写作! 眼睛睡觉了但思维和创作动力仍在冗奋中,作为一个程序员的你,我说的对吗?有同样的感受吗? 所以:转载时请注明本文来自易学网!言归正传,接下来讲解系统框架实现过程。
首先看几个图对框架有个初步认识。
1.登陆窗体准备登录窗体如通过验证用户,则加载MDI主窗体,留意图片内的动态消息:正在初始化用户界面,请稍候.登录窗体是多数应用程序的入口,在进入系统前需要用户验证。
请看实现过程:2.MDI主窗体登录成功后显示MDI主窗体. 图片为测试模块II的主界面.登录成功后显示MDI主窗体. 图片为系统管理模块的主界面.3.关于程序/作者4.解决方案用代码实现登录到加载MDI主窗体.1.程序入口代码:代码static class Program{[STAThread]static void Main(){//捕获系统所产生的异常。
Application.ThreadException += new ThreadExceptionEve ntHandler(Application_ThreadException);SystemConfig.ReadSettings(); //读取系统设置bllService.SetDataBasePath(); //因用到Access,指定一个M DB文件Process instance = SingletonProgram.GetRunningInstanc e();if (instance != null) Msg.Warning("程序已经运行.");if ((instance != null) && (!SystemConfig.CurrentConfi g.AllowRunMultiInstance)){SingletonProgram.HandleRunningInstance(instance);//Active instancereturn;}Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);//注意:先打开登陆窗体,如登陆成功后再正式运行程序(MDI 主窗体) //学会这种写法。
if (AppEntry.Login())Application.Run(AppEntry.MainForm);elseApplication.Exit();}private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e){Msg.ShowException(e.Exception);}}转载请注明来自易学网 易学原创作品留意这段代码:if (AppEntry.Login())Application.Run(AppEntry.MainForm);elseApplication.Exit();调用AppEntry类表态方法Login(),如登录成功,此时已经创建MainForm实例,则运行主窗体.AppEntry类是个公共类,仅定义登录方法及MDI主窗体变量.在登录窗体内用到该类.用户登录成功则创建frmMain实例.然后调用Application.Run(AppEntry.MainForm)方法.2.AppEntry类,应用程序入口类.代码public class AppEntry{public static bool Login(){return frmLogin.TryLogin();}private static frmMain _mainForm = null;public static frmMain MainForm { get { return _mainForm; } set { _mainForm = value; } }}3.登录窗体源代码:代码public partial class frmLogin : Form{//将构造器设为静态,防止外部创建实例private frmLogin(){InitializeComponent();}///<summary>///打开登陆窗体,公开一个主静态方法///</summary>///<returns></returns>public static bool TryLogin(){frmLogin form = new frmLogin();bool ret = form.ShowDialog() == DialogResult.OK;return ret;}private void btnLogin_Click(object sender, EventArgs e) {//调用业务层登录方法bool ret = new bllUser().Login(txtUser.Text, txtPwd.T ext);if (ret){//登录成功创建主窗体AppEntry.MainForm = new frmMain();//初始化主窗体(如加载模块,初始化用户界,加载系统参数)//在初始化同时login窗体会动态显示信息。
AppEntry.MainForm.InitUserInterface(new StatusLabl e(this.lblLoadingInfo));this.DialogResult = DialogResult.OK;this.Close(); //关闭登陆窗体}else{Msg.Warning("登录失败,请检查用户名和密码!");}}private void btnCancel_Click(object sender, EventArgs e) {this.Close();}}转载请注明来自易学网 / 易学原创作品这里需要调用业务层执行用户登录. 要学会将业务代码与界面代码分离.//调用业务层登录方法bool ret = new bllUser().Login(txtUser.Text, txtPwd.Text);if (ret){.........当登录成功,创建MDI主窗体实例,然后调用实例方法InitUserInterface.这时初始化主窗体.//初始化主窗体(如加载模块,初始化用户界,加载系统参数)//在初始化同时login窗体会动态显示信息。
AppEntry.MainForm.InitUserInterface(new StatusLable(this. lblLoadingInfo));4.下面是MDI主窗体的代码:代码public partial class frmMain : Form{//模块管理器实例private ModuleManager _ModuleManager;public frmMain(){InitializeComponent();}//初始化用户接口public void InitUserInterface(StatusLable splash){this.SuspendLayout();splash.UpdateMessage("正在初始化用户界面,请稍候...");_ModuleManager = new ModuleManager(this, xtraTabContr ol1);//创建模块管理器_ModuleManager.LoadModules(splash); //加载可用模块splash.UpdateMessage("正在加载工具栏...");_ModuleManager.CreateNavBarButtons(this.navBarContro l1, this.menuStrip1); //创建导航工具栏按钮splash.UpdateMessage("正在加载用户模块...");splash.UpdateMessage("正在初始化数据...");splash.UpdateMessage("加载完毕.");this.ResumeLayout();}///<summary>///显示由参数指定的模块///</summary>public void ActiveModule(string moduleDisplayName){foreach (XtraTabPage page in this.xtraTabControl1.Tab Pages){if (page.Text.Equals(moduleDisplayName)){xtraTabControl1.SelectedTabPage = page;return;}}}private void btnHelp_Click(object sender, EventArgs e) {new frmAboutVjsdn().ShowDialog();}private void btnClose_Click(object sender, EventArgs e) {this.Close();}private void btnAbout_Click(object sender, EventArgs e) {new frmAboutVjsdn().ShowDialog();}}转载请注明来自易学网 / 易学原创作品窗体类定义一个_ModuleManager变量,用于加载模块.请看ModuleManager详解. InitUserInterface()方法是初始化主窗体方法.由frmLogin调用.转载请注明来自易学网/易学原创作品续....================================================== 全部链接:1.C/S结构数据库系统框架详解/bbs/bbsTopicDetails.aspx?pid=1092012182.ModuleManager详解/bbs/bbsTopicDetails.aspx?pid=109201219 3.如何新建一个模块/bbs/bbsTopicDetails.aspx?pid=109201220 4.C/S结构数据库系统框架源代码/bbs/bbsTopicDetails.aspx?pid=109201221。