零碎笔记集合......
MSDN
TextWriter 表示可以编写一个有序字符系列的编写器。该类为抽象类。
命名空间:System.IO
程序集:mscorlib(在 mscorlib.dll 中)
XmlSerializer 初始化 XmlSerializer 类的新实例,该类可以将指定类型的对象序列化为 XML 文档,也可以将 XML 文档反序列化为指定类型的对象。
命名空间: System.Xml.Serialization
程序集: System.Xml(在 System.Xml.dll 中)
Beautifual Article
Bits and pieces
1、Application类的Exit静态方法,可以方便地退出应用程序,与Form的Close方法不同,Close方法是关闭当前窗体
2、对话框
DialogResult result = MessageBox.Show(this,//弹出消息对话框 "真的要关闭该窗口吗?", "关闭提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question); if (result == DialogResult.OK)//判断是否点击确定按钮 { Application.Exit();//关闭窗口 }
3、使用控件的Tag属性传递信息
该属性用来获取或设置包含有关控件的数据的对象
4、控件得到焦点是变色
private void textBox1_Enter(object sender, EventArgs e) { textBox1.BackColor = Color.Beige;//设置控件背景颜色 } private void textBox1_Leave(object sender, EventArgs e) { textBox1.BackColor = Color.White;//设置控件背景颜色 }
4、Bin 目录用来存放编译的结果,bin是二进制binrary的英文缩写,因为最初C编译的程序文件都是二进制文件,它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin/Release,这个文件夹是默认的输出路径,我们可以通过:项目属性—>配置属性—>输出路径来修改。
obj是object的缩写,用于存放编译过程中生成的中间临时文件。其中都有debug和release两个子目录,分别对应调试版本和发行版本,在.NET中,编译是分模块进行的,编译整个完成后会合并为一个.DLL或.EXE保存到bin目录下。因为每次编译时默认都是采用增量编译,即只重新编译改变了的模块,obj保存每个模块的编译结果,用来加快编译速度。是否采用增量编译,可以通过:项目属性—>配置属性—>高级—>增量编译来设置。
PRoperties文件夹 定义你程序集的属性 项目属性文件夹 一般只有一个 AssemblyInfo.cs 类文件,用于保存程序集的信息,如名称,版本等,这些信息一般与项目属性面板中的数据对应,不需要手动编写。
.cs 类文件。源代码都写在这里,主要就看这里的代码。
.resx 资源文件,一些资源存放在这里,一般不需要看。
.csproj C#项目文件,用VS打开这个文件就可以直接打开这个项目,自动生成,不需要看。
.csproj.user 是一个配置文件,自动生成的,会记录项目生成路径、项目启动程序等信息。也不需要看。
.Designer.cs 设计文件,自动生成,不需要看。
.aspx 是网页文件,HTML代码写在这里面。
sln:在开发环境中使用的解决方案文件。它将一个或多个项目的所有元素组织到单个的解决方案中。此文件存储在父项目目录中.解决方案文件,他是一个或多个.proj(项目)的集合
*.sln:(Visual Studio.Solution) 通过为环境提供对项目、项目项和解决方案项在磁盘上位置的引用,可将它们组织到解决方案中。
比如是生成Debug模式,还是Release模式,是通用CPU还是专用的等
对程序集的理解
20分钟读懂程序集
5、//谓词方法,这个方法将被传递给FindAll方法进行书书籍分类的判断
- static bool IsBookCategory(string str)
- {
- return str.EndsWith("课程") ? true : false;
- }
6、var关键字用来创建隐式局部变量,它指示编译器根据初始化语句右侧的表达式推断变量的类型,推断类型可以是内置类型(内置类型顾名思义,就是某种语言自己定义的一些东西,例如:变量类型,类等)、匿名类型、用户自定义类型、.net framework类库中定义的类型或任何表达式
注意:var声明变量不能赋值为null(var x=null 错);var只能声明局部变量;不允许改变var变量的类型(var x=100; x="asf"; 错);var的变量时强类型的变量,具有安全性。
7、对象初始化器(Collection Initializers)由一系列成员对象组成,其对象必须初始化,用逗号隔开
IList<Book> books = new List<Book> { new Book { Title = "Inside COM", ISBN = "123-456-789",Price=20 }, new Book { Title = "Inside C#", ISBN = "123-356-d89",Price=100 }, new Book { Title = "Linq", ISBN = "123-d56-d89", Price = 120 } };
7、扩展方法
扩展方法可以向现有类中“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展的实例方法一样
进行调用。
(1)扩展方法必须被定义在一个静态类中,扩展方法自身必须是一个静态方法
(2)扩展方法中的首个参数必须是this,最后紧跟要扩展的类的名称
(3)扩展方法可以被正确的对象实例调用,也可以使用静态类名静态调用
class Program { static void Main(string[] args) { (new User() { Name = "张三", Age = 23, Pay = 1234 }).ShowInfo(); } } class User { public string Name {get;set; } public int Age { get; set; } public double Pay { get; set; } public override string ToString() { return string.Format("姓名:{0},年龄:{1},工资:{2}",Name,Age,Pay); } } static class Display { public static void ShowInfo(this object s) { Console.WriteLine(s.ToString()); Console.ReadLine(); } }
8、Enumerable类的ElementAt方法主要用来返回源序列中指定索引处的元素
集合.ElementAt(int position);
Skip和First操作可以实现同样的功能
int result2=集合.Skip(3).First(); //Skip操作符跳过3个元素返回整型序列中剩余的元素,其次使用First操作符获取返回元素中的第一个元素。
public static IEnumerable<T>Repeat<T>(T element,int count) element://要重复的值
count://在生成序列中重复该值的次数
IEnumerable<int>randomSeq=Enumerable.Repeat<int>(1,5);
9、ConsoleKey的用法
ConsoleKey key; do { key = Console.ReadKey(true).Key; } while (key != ConsoleKey.Q);
10、程序控制:打开控制面板中的程序
Process类主要提供对本地和远程进程的访问并使用户能够启动和停止本地系统的进程
private void button1_Click(object sender,EventArgs e) { System.Diagnostics.Process.Start("main.cpl");//打开鼠标设置窗口 } private void button1_Click(object sender,EventArgs e) { System.Diagnostics.Process.Start("desk.cpl");//打开桌面设置窗口 } private void button1_Click(object sender,EventArgs e) { System.Diagnostics.Process.Start("ncpa.cpl");//打开网络设置窗口 } private void button1_Click(object sender,EventArgs e) { System.Diagnostics.Process.Start("mmsys.cpl");//打开声音设置窗口 }
11、ListView中设置GridLine=true=>View=>Details
12、窗体的一些东西
13、数据迁移-呵呵
13、杂
14、用户登录与注册
15、可空类型:看到这样的解释,是说数据空中的int可以为空,然后在对数据库中的数进行读取的时候如果读到int类型的时候数据为空该怎么办呢.....格式int ? i=null;
private void btnRegister_Click(object sender, EventArgs e) { try { string loginId = txtLoginId.Text.Trim(); string loginPWD = MD5Str.MD5Tostring(txtPWD.Text.Trim()); string realName = txtRealName.Text.Trim(); string insertCmd = "insert into T_Seats values(@loginId,@realName,@loginPWD)"; SqlParameter[]pms=new SqlParameter[] { new SqlParameter("@loginId",loginId), new SqlParameter("@realName",realName), new SqlParameter("@loginPWD",loginPWD) }; int i = SqlHelper.ExecuteNonQuery(insertCmd, CommandType.Text, pms); if (i > 0) { MessageBox.Show("注册成功"); } else { MessageBox.Show("注册失败"); } } catch (Exception ex) { throw; } }
using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Security; namespace _01登录和注册 { public static class MD5Str { public static string MD5Tostring(string str) { //1、创建一个MD5对象 MD5 md5 = MD5.Create(); //2、将字符串转换成字节数组 byte[] buffer = System.Text.Encoding.UTF8.GetBytes(str); //3、生成散列值 byte[] md5buffer = md5.ComputeHash(buffer); //4、将生成的字节数组转换成字符串 StringBuilder sb=new StringBuilder(); for (int i = 0; i < md5buffer.Length; i++) { sb.Append(md5buffer[i].ToString("X2")); } return sb.ToString(); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Configuration; using System.Data.SqlClient; using System.Data; namespace _01用户注册_登录_三次锁定_修改密码.DAL { class SqlHelper { //数据库连接字符串 private static readonly string conStr = ConfigurationManager.ConnectionStrings["conn"].ConnectionString; /// <summary> 注册 /// 注册 /// </summary> /// <param name="sqls">开始事务的sql语句</param> /// <returns>bool</returns> public static bool TransactionBySqls(string sqlUserLoadText,string sqlQuestionText) { bool isRegisterSucceed = false; using(SqlConnection sqlConn=new SqlConnection(conStr)) { using (SqlCommand sqlCmd = new SqlCommand()) { sqlCmd.Connection = sqlConn; if (sqlConn.State == ConnectionState.Closed) { sqlConn.Open(); } SqlTransaction sqlTran = sqlConn.BeginTransaction(); try { sqlCmd.Transaction = sqlTran; sqlCmd.CommandText = sqlUserLoadText; sqlCmd.ExecuteNonQuery(); sqlCmd.CommandText = sqlQuestionText; sqlCmd.ExecuteNonQuery(); sqlTran.Commit(); isRegisterSucceed = true; } catch(Exception ex) { sqlTran.Rollback(); isRegisterSucceed = false; throw new Exception(ex.ToString()); } } } return isRegisterSucceed; } public static SqlDataReader ExecuteReader(string sqlText,CommandType cmdType,params SqlParameter[]pms) { SqlConnection sqlConn=new SqlConnection(conStr);//此处不能使用using,因为reader读取数据时必须保证Connection打开,当Connection关闭时reader也随之关闭,其关闭是在调用者读取完其中的数据之后 using (SqlCommand sqlCmd = new SqlCommand(sqlText, sqlConn)) { if (sqlConn.State == ConnectionState.Closed) { sqlConn.Open(); } sqlCmd.CommandType = cmdType; if (pms != null) { sqlCmd.Parameters.AddRange(pms); } //这样写的目的是实现当Connection关闭时也会关闭SqlDataReader SqlDataReader reader = sqlCmd.ExecuteReader(CommandBehavior.CloseConnection); return reader; } } internal static int ExecuteNoneQuery(string sqlText,CommandType commandType,params SqlParameter[]pms) { using (SqlConnection sqlConn = new SqlConnection(conStr)) { using (SqlCommand sqlCmd = new SqlCommand(sqlText, sqlConn)) { try { sqlCmd.CommandType = CommandType.Text; if (sqlConn.State == ConnectionState.Closed) { sqlConn.Open(); } if (pms != null) { sqlCmd.Parameters.AddRange(pms); } return sqlCmd.ExecuteNonQuery(); } catch { throw new Exception(""); } } } } } }
dal
using System; using System.Collections.Generic; using System.Linq; using System.Text; using _01用户注册_登录_三次锁定_修改密码.Model; using System.Data.SqlClient; namespace _01用户注册_登录_三次锁定_修改密码.DAL { class UserIsExistDAL { public UserInfo GetUserInfoDal(string uid, string pwd) { UserInfo userInfo = new UserInfo(); string sqlText = "select * from UserLoad where userID=@uid;"; using (SqlDataReader reader = SqlHelper.ExecuteReader(sqlText,System.Data.CommandType.Text, new SqlParameter("@uid", uid))) { if (reader.HasRows) { if (reader.Read()) { userInfo.UserID = reader.GetString(0); userInfo.UserName = reader.GetString(1); userInfo.PWD = reader.GetString(2); userInfo.Role = reader.GetString(3); } else { throw new Exception("调用DataReader时失败"); } } else { userInfo = null; } } return userInfo; } } }
bll
using System; using System.Collections.Generic; using System.Linq; using System.Text; using _01用户注册_登录_三次锁定_修改密码.DAL; using _01用户注册_登录_三次锁定_修改密码.Model; namespace _01用户注册_登录_三次锁定_修改密码.BLL { class UserLoadIsExistBLL { public bool CheckCard(string txt,string card) { return card.Equals(txt); } public UserLoadResultBll UserIsExist(string uid, string pwd) { UserIsExistDAL userIsExist = new UserIsExistDAL(); UserInfo userInfo=userIsExist.GetUserInfoDal(uid, UseMD5.CreateMD5(pwd)); if (userInfo == null) { return UserLoadResultBll.UserIsNotExist; } else if (UseMD5.CreateMD5(pwd) != userInfo.PWD) { return UserLoadResultBll.UserPWDIsWrong; } else { return UserLoadResultBll.UserLoadSucceed; } } } }
public bool RegisterBLL(string userID, string userName, string pwd, string role,int questionOneID,int questionOneIndex,string answerOne,int questionTwoID,int questionTwoIndex,string answerTwo,int questionThreeID,int questionThreeIndex,string answerThree) { UserRegisterDAL registerDal = new UserRegisterDAL(); return registerDal.RegisterDal(userID, userName, UseMD5.CreateMD5(pwd), role, questionOneID, questionOneIndex,UseMD5.CreateMD5(answerOne), questionTwoID, questionTwoIndex,UseMD5.CreateMD5(answerTwo), questionThreeID, questionTwoIndex,UseMD5.CreateMD5(answerThree)); }
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.OleDb; public class db { /// <summary> /// 数据库连接 /// </summary> public static string conicution { get { // string C_conn = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source =" + Application.StartupPath + "\\Testsystem.accdb"; string C_conn = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + Application.StartupPath + "\\Testsystem.mdb "; return C_conn; } } public static object loc = new object();///新建一个要锁的对象 /// <summary> /// 添加,删除,修改 /// </summary> /// <param name="sql"></param> /// <returns></returns> public static int My_sql(string sql) { OleDbConnection conn=null; try { string str = conicution; conn = new OleDbConnection(str); conn.Open(); OleDbCommand db = new OleDbCommand(sql, conn); db.ExecuteNonQuery(); return 1; } catch { return -1; } finally { conn.Close(); conn.Dispose(); } } /// <summary> /// 返回要显示的一张数据表 /// </summary> /// <param name="sql"></param> /// <returns></returns> public static DataTable tables(string sql) { OleDbConnection conn = null; try { string str = conicution; conn = new OleDbConnection(str); conn.Open(); OleDbDataAdapter mydb = new OleDbDataAdapter(sql, conn); DataTable dt = new DataTable(); mydb.Fill(dt); return dt; } catch (Exception e) { throw new Exception(e.Message, e); } finally { conn.Close(); conn.Dispose(); } } /// <summary> /// 设置写入时想要转换的字符 /// </summary> /// <param name="str">写入时要转换的字符</param> /// <returns></returns> public static string Set_Str(string str) { str=str.Replace("'","‘"); return str; } /// <summary> /// 设置想要读出来时想要转换的字符 /// </summary> /// <param name="str">读出时需要转换的字符</param> /// <returns></returns> public static string Get_Str(string str) { str = str.Replace("‘", "'"); return str; } /// <summary> /// 从左截取串 scatitle 的 cid个字符 /// </summary> /// <param name="scatitle"></param> /// <param name="cid"></param> /// <returns></returns> public static string getleft(string scatitle, int cid) { string rtn = ""; if (scatitle.Trim().Length > cid) { rtn = scatitle.Substring(0, cid) + "..."; } else { rtn = scatitle; } return rtn; } /// <summary> /// 过滤非法字符 /// </summary> /// <param name="inputStr"></param> /// <returns></returns> /// public static string cutBadStr(string inputStr) { inputStr = inputStr.ToLower().Replace(",", ""); inputStr = inputStr.ToLower().Replace("<", ""); inputStr = inputStr.ToLower().Replace(">", ""); inputStr = inputStr.ToLower().Replace("%", ""); inputStr = inputStr.ToLower().Replace(".", ""); inputStr = inputStr.ToLower().Replace(":", ""); inputStr = inputStr.ToLower().Replace("#", ""); inputStr = inputStr.ToLower().Replace("&", ""); inputStr = inputStr.ToLower().Replace("$", ""); inputStr = inputStr.ToLower().Replace("^", ""); inputStr = inputStr.ToLower().Replace("*", ""); inputStr = inputStr.ToLower().Replace("`", ""); inputStr = inputStr.ToLower().Replace(" ", ""); inputStr = inputStr.ToLower().Replace("~", ""); inputStr = inputStr.ToLower().Replace("or", ""); inputStr = inputStr.ToLower().Replace("and", ""); inputStr = inputStr.ToLower().Replace("'", ""); return inputStr; } /// <summary> /// 说明:留言时按照标准形式显示留言格式;即格式化文本 /// </summary> /// <param name="str"></param> /// <returns></returns> public static string FormatString(string str) { str = str.Replace(" ", "  "); str = str.Replace("<", "<"); str = str.Replace(">", "&glt;"); str = str.Replace('\n'.ToString(), "<br>"); return str; } /// <summary> /// 判断是否为数字 /// </summary> /// <param name="myObj">传递的参数</param> /// <returns>返回真假值</returns> public static bool isNumber(Object myObj) { try { int i = Convert.ToInt32(myObj); return (true); } catch { return (false); } } }
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.OleDb; namespace 考试系统 { public partial class XuanZen : Form { public XuanZen() { InitializeComponent(); } int Xt_Count;//选择题的总数 DataTable dt; OleDbDataAdapter OleDat; int id; string str; int Df;//多少分一题 string Dan_an; int Df2;//得了多少数 int tim; private void XuanZen_Load(object sender, EventArgs e) { Loads(); } //初始页 void Loads() { str = "选择题"; dt = db.tables("select * from 题目 where 类型='" + str + "'"); Xt_Count = dt.Rows.Count; label8.Text = "共有" + Xt_Count + "题"; dt = db.tables("select * from 每题分数 where 类型='" + str + "'"); Df = int.Parse(dt.Rows[0][2].ToString()); if (dt.Rows[0][3].ToString().Trim() == "关") { button3.Visible = false; } label10.Text = "每得对一题得" + Df + "分"; XT.Text = "1"; showInfo(0, 1); Df2 = 0; label9.Visible = false; tim = 60;//到计时时间 } //下一题 private void button1_Click(object sender, EventArgs e) { timer1.Enabled = true; label9.Visible = false ; if (radioButton1.Checked) { Dan_an = "A项"; } else if (radioButton3.Checked) { Dan_an = "B项"; } else if (radioButton2.Checked) { Dan_an = "C项"; } else if (radioButton4.Checked) { Dan_an = "D项"; } if (label9.Text == Dan_an) { Df2 += Df; } Dan_an = ""; if (int.Parse(XT.Text) >= Xt_Count) { timer1.Enabled = false; MessageBox.Show("测试结束!\r\n您的得分是" + Df2); button1.Enabled = false; button2.Visible = true; } else { showInfo(int.Parse(XT.Text), int.Parse(XT.Text) + 1); //调用showInfo函数 XT.Text = (int.Parse(XT.Text) + 1).ToString(); radioButton1.Checked = false; radioButton2.Checked = false; radioButton3.Checked = false; radioButton4.Checked = false; } } //显示信息 private void showInfo(int first, int next) { dt = new DataTable(); OleDat = new OleDbDataAdapter("select * from 题目 where 类型='" + str + "'", db.conicution); OleDat.Fill(first, next, dt); id = int.Parse(dt.Rows[0][0].ToString()); label5.Text = dt.Rows[0][1].ToString(); dt = db.tables("select * from 选择题 where 题目ID=" + id + ""); if (dt.Rows.Count > 0) { label1.Text = dt.Rows[0][2].ToString(); label2.Text = dt.Rows[0][3].ToString(); label3.Text = dt.Rows[0][4].ToString(); label4.Text = dt.Rows[0][5].ToString(); if (label4.Text.Trim().Length == 0) { radioButton4.Visible = false; } else { radioButton4.Visible = true; } label9.Text = dt.Rows[0][6].ToString(); } else { label1.Text = "缺内容,请联系管理员!"; label2.Text = "缺内容,请联系管理员!"; label3.Text = "缺内容,请联系管理员!"; label4.Text = "缺内容,请联系管理员!"; label9.Text = "缺内容,请联系管理员!"; } } private void button2_Click(object sender, EventArgs e) { button2.Visible = false; button1.Enabled = true; Loads(); } private void button3_Click(object sender, EventArgs e) { label9.Visible = true; } private void timer1_Tick(object sender, EventArgs e) { tim = tim-1; label11.Text = tim.ToString(); if (tim == 0) { timer1.Enabled = false; MessageBox.Show("时间到!\r\n您的得分是" + Df2); button1.Enabled = false; button2.Visible = true; } } } }