• 前言

虽然用C# winform开发项目有段时间了,但之前没系统学过,也没人指导,平时做项目都是从需求出发,学习对应的知识。老师给的评价是:虽然功能都能实现,但还欠点火候。最近给审计局的学长做个审计管理系统,需求其实和通常的成绩管理系统很相似,就在网上下载了个成绩管理系统作为参考(网址:https://github.com/soulsjie/StuScoreMa)。这个系统,虽然内容上没什么新意,但是形式上特别规范,让我有种拍案而起的冲动:原来可以这样。做完我的系统后,觉得有几点很值得和刚接触C# winform开发的同学分享分享。

  • 创建文件夹

根据项目文件的类型创建文件夹,每个文件夹中放入同一类型的文件。添加文件时,右键文件夹,选择添加新项。这样做的好处是为了更方便的找到你想要的文件,小项目可能体现不出来效果,毕竟也没几个文件,但是对一些大的项目开发是必不可少的。而且也提高了代码的可读性,其他人通过看目录,能初步了解系统的结构。

定义了一个文件夹,相当于定义了一个命名空间。比如我在main.cs代码界面中调用工具类文件夹下的DBliink类,因为不在一个文件夹里,所以要在代码首部添加引用。

using Audit.工具类;
  • 封装操作类

C# winform开发是一种事件驱动型模型,所以你在开发时会发现主窗体的代码量会越来越多,因为它是所有事件的起点。代码量一多,就容易混乱,特别是以前我把事件和方法操作混在一起的时候。通过加注释和关键字#region,效果不明显,治标不治本。错的最离谱的一点是, 这样做根本不能体现C#面向对象的优越性,这可能和我习惯了C有关。下面我给出 mysql操作类,帮助大家了解C#面向对象的精彩。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;using MySql.Data.MySqlClient;
using System.Windows.Forms;   //引入Messagebox
using Audit.数据实体类;namespace Audit.工具类
{//将数据库连接功能,单独定义为一个类来执行class DBlink{MySqlConnection sqlCnn = new MySqlConnection(); //创建数据库连接对象MySqlCommand sqlCmd = new MySqlCommand();       //创建执行sql的对象//创建数据连接public Boolean DBcon(){Boolean tag = false;sqlCnn.ConnectionString = "server = '127.0.0.1'; uid = 'root'; pwd = 'root'; database = 'audit_project';";//连接字符串sqlCmd.Connection = sqlCnn;try{sqlCnn.Open();tag = true;}catch (Exception ex){MessageBox.Show(ex.Message, "error");}return tag;}//关闭数据库连接public void DBclose(){sqlCnn.Close();//Console.WriteLine("数据库连接关闭");//Console.ReadKey();}//执行查询的sqlpublic Boolean search(String str){Boolean tag = false;sqlCmd.CommandText = str;MySqlDataReader rec = sqlCmd.ExecuteReader();//创建结果集if (rec.HasRows){tag  = true;     // 查询到数据}return tag;}//执行增删改的sqlpublic Boolean UpdataDeletAdd(string str){sqlCmd.CommandText = str;return sqlCmd.ExecuteNonQuery() > 0;}//定义自定义函数方法,在dataGridView中显示单位的审计情况       public void Get_dataGridView1_data(string str){sqlCmd.CommandText = str;MySqlDataReader rec = sqlCmd.ExecuteReader();//初始化数据;uint_data.id.Clear();uint_data.unit.Clear();uint_data.tf_audit.Clear();while (rec.Read()){uint_data.id.Add(rec.GetString(0));uint_data.unit.Add(rec.GetString(1));uint_data.tf_audit.Add(rec.GetString(2));}}
}  

在窗体中,通过声明类的对象,来调用类中的方法,将事件和操作完全分开,主窗体中只有各种事件。

if (db.DBcon())   //连接数据库成功
{if (!db.UpdataDeletAdd(str)) {DialogResult dr = MessageBox.Show("删除失败", "标题", MessageBoxButtons.OK, MessageBoxIcon.Question);}
}
db.DBclose();  //避免多线程操作数据库,影响系统报错,先关闭数据连接
  • 封装数据类

有一些重要的变量会涉及到好几个窗体,比如成绩管理系统中用户的登录名。我以前的做法是,在主窗体中定义该变量为静态变量,然后在子窗体中通过主窗体名直接点出来,或者是通过构造函数传递参数。其实这些方法都是可行的,完全不会影响编译,但是的确不过规范,会让主窗体中定义的变量过多,容易混淆。下面以用户登录信息的数据实体为例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections; namespace dataADUstudy.数据实体类
{class LoginInfo{//保存用户登录信息的数据实体public static string username;  //用户名public static string password;  //密码public static int tag;          //审核标记public static string sf;        //身份标记public static string number;    //学号--学生信息表中的主键public static string banji;     //班级public static Boolean isadmin=false;      //管理员标记//创建list存储查询的用户信息结果集(个人特别喜欢用动态数据,操作非常方便)public static ArrayList idList = new ArrayList();        //用户idpublic static ArrayList usernameList = new ArrayList();  //用户名public static ArrayList passwordList = new ArrayList();  //登录密码public static ArrayList SfList = new ArrayList();        //用户身份public static ArrayList numberList = new ArrayList();    //用户编号public static ArrayList banjiList = new ArrayList();     //所属班级}
}// 通过类名调用数据
// LoginInfo.username = rec.GetString(1);  //将用户名存放到数据实体类
  • 总结

说了这么多,其实就是为了一个目的,就是为了减少主窗体的代码量,只留下事件。这几条规范也只是我的有感而发吧,这个命题还是很大的,欢迎大神指点。另外,我的审计管理系统也已经上传了,欢迎下载。https://download.csdn.net/download/langwen2048/10817236

C# winform项目开发规范相关推荐

  1. Laravel 项目开发规范

    一. 说明 以下内容大部分引用Laravel China社区的文章 - 分享下团队的开发规范 --<Laravel 项目开发规范>. 相对而言,上面引用的文章的规范更加严格,但考虑到目前的 ...

  2. 前端规范 - 前端项目开发规范

    0 前言 好好做业务,提高自己的工程能力 [强制] 1 开启eslint 根据团队的习惯,制定适合自己的rules 比如 no-console no-debugger可以关闭 [强制] 2 新项目使用 ...

  3. Java后台项目开发规范

    Java后台项目开发规范 写在前边 1.目标 2. 原则 一.命名规范 1.包命名规范 2.类命名规范[**UpperCamelCase命名法**] 2.1==如果在模块或者接口,类,方法中使用了设计 ...

  4. java服务端项目开发规范

    更新内容 2015-03-13 (请先更新svn的mybatis.xml.BaseMapper.java.Pager.java文件) 加入测试类规范 加入事物控制规范 加入mapper接口规则 ...

  5. 【项目总结】项目开发规范

    目录 背景 后端规范 一.接口api规范 1.接口风格接口风格统一采用restful规范 2.接口api命名规范 3.接口参数规范 4.接口响应数据/状态码规范 4.1响应数据结构 4.2Http状态 ...

  6. php larval开发规范,数据模型 |《 Laravel 项目开发规范 5.5》| Laravel China 社区

    本文档最新版为 7.x,旧版本可能放弃维护,推荐阅读最新版! 放置位置 所有的数据模型文件,都 必须 存放在:app/Models/ 文件夹中. 命名空间: namespace App\Models; ...

  7. 项目开发规范--前端

    通用规范 基本原则: 编译器统一设置编码为UTF-8:换行符为LF. 源文件编码格式(包括注释)必须是 UTF-8 命名必须使用英文单词,不可出现拼音 命名缩写,行业约定俗称的缩写可以直接使用 命名缩 ...

  8. python大型项目开发规范_大型项目CMakeLIsts.txt的编写规范

    1.Very simple executable PROJECT( helloworld )   # 非必需 SET( hello_SRCS hello.cpp ) ADD_EXECUTABLE( h ...

  9. 【开发规范】go项目开发中的[流程,git,代码,目录,微服务仓库管理,静态检查]

    文章目录 前言 一.有哪些规范我们应该遵循 二.项目开发流程 三.git的代码分支管理 1. 分支管理 2. commit规范 三.go的代码规范 四.go项目目录规范 五.微服务该采用multi-r ...

  10. 普通软件项目开发过程规范(五)—— 总结 (转)

    总 结 图 8-1 项目阶段 软件项目开发经历多个阶段,每个阶段包含多个任务,每个任务会产生相应的工件.需要相应的质量保证措施对任务进行监控,保证任务的执行.任务完成后也需要对任务进行评审,保证任务的 ...

最新文章

  1. RDKit | 基于分子形状的比对
  2. 关于SQL Server中索引使用及维护简介
  3. 连接一切:自媒体的未来是什么??
  4. Nginx 启动报错 “/var/run/nginx/nginx.pid failed”
  5. 组件和高阶组件区别_为什么要对高阶组件使用代码拆分
  6. leetCode 题 - 100. 相同的树
  7. 新加坡科技设计大学招收全奖博士,以及Research Assistant/Postdoc
  8. 用PD进行数据库建模经验总结
  9. 电子工业出版社博文视点图书在微软VS2010全球发布会上受追捧
  10. Idea 我的快捷键总结
  11. Cent OS 下 VI 使用方法
  12. 南昊网上阅卷系统服务器地址,南昊网上阅卷系统
  13. php ksc歌词,KSC字幕制作方法 KSC歌词编辑教程
  14. word只能以安全模式打开
  15. 图像测量技术:面积测量
  16. C#精挑整理知识要点11 委托和事件(建议收藏)
  17. RK3588 VOP-SPLIT分屏模式介绍
  18. 天刀一代宗师服务器维护,3月13日服务器例行维护公告(已完成)
  19. 为什么你学了那么多,却没赚到钱?
  20. 手把手让你实现开源企业级web高并发解决方案

热门文章

  1. 生产用计算机房噪音应小于,机房建设规范标准要求
  2. C++对象数组 —— 学生信息表
  3. H.266/VVC代码学习:xCheckRDCostAffineMerge2Nx2N函数
  4. 卸载干净ARCGIS不用手动删注册表,一键用GEEK
  5. 最新手机号段归属地数据库 (2021年4月版) 473101行
  6. 黑客(一):黑客守则
  7. Java高级工程师技能要求参考
  8. php_redis配置安装php_redis-5.1.1-7.4-nts-vc15-x64.zip
  9. 如何优雅地给同事提“改进性建议”
  10. 使用C#列出所有中文汉字