两天C#项目总结

这两天做了一个简单的银证转账管理系统,做得不是很满意,但是其中学到了一些很实用的东西,比如socket多线程编程,界面设计要统一等等..

现在结束了特想写个博客记录下,以后再写相关的项目就能很好地利用上这些资源。

1、show是模态对话框,showdialog是非模态对话框,如果用show来现实新对话框会导致对话框满天飞,而showdialog则使得对话框现实比较有条理。

//先打开子窗体,想隐藏主窗体。
//如果这个时候用Show的话,则会发生:打开子窗体的同时主窗体又显示出来
//使用ShowDialog()的时候主要当子窗体关闭的时候主窗体才会显示。
Form2 f2 = new Form2();
this.Visible = false;
f2.ShowDialog();
this.Visible= true;


2、若要指定对话框在某个位置,可通过修改对话框属性startposition 来指定位置。


3、如果不需要窗体上面的组大话最小化按钮可以点属性设置,如果不要关闭,可在在初始化方法中加this.ControlBox = false; 或者将将form的formborderstyle设定为none标题栏就没了


4、获取屏幕尺寸大小

 Rectangle rect = System.Windows.Forms.SystemInformation.VirtualScreen;
 int width = rect.Width;
 int height = rect.Height;


5、选择需要对齐格式的代码快,然后ctrl+K再按ctrl+F即可


6、网络传输时需要字节流和字符串互转可用Encoding.Unicode.GetBytes(string)或者Encoding.Unicode.GetString(byte[])


7、string转换为char数组,直接用string str = string(cha),char数组转换为strng使用char[] cha = str.ToCharArray();


8、将一个string根据某些跟则拆分成若干个string,string[]many = str.Split('$');


9、Tcpclient操作 http://msdn.microsoft.com/zh-cn/library/system.net.sockets.tcpclient.aspx
TcpClient 类提供了一些简单的方法,用于在同步阻止模式下通过网络来连接、发送和接收流数据。
为使 TcpClient 连接并交换数据,使用 TCP ProtocolType 创建的 TcpListener 或 Socket 必须侦听是否有传入的连接请求。 可以使用下面两种方法之一连接到该侦听器:
* 创建一个 TcpClient,并调用三个可用的 Connect 方法之一。
* 使用远程主机的主机名和端口号创建 TcpClient。 此构造函数将自动尝试一个连接。
要发送和接收数据,请使用 GetStream 方法来获取一个 NetworkStream。 调用 NetworkStream 的 Write 和 Read 方法与远程主机之间发送和接收数据。 使用 Close 方法释放与TcpClient 关联的所有资源。

//我创建了一个TcpConnection类,传入ip地址和端口号返回一个tcpclient类
public int _port;
public IPAddress _ipAddr;
public NetworkStream nws;
_port = 8888;
string strserver = "127.0.0.1";
IPAddress.TryParse(strserver, out _ipAddr); //字符串转ip
//字符串转字节流并发送到服务器
String sendTxt;
nws.Write(Encoding.Unicode.GetBytes(sendTxt), 0, Encoding.Unicode.GetBytes(sendTxt).Length); 
//从服务器读取字节流
byte[] packet = new byte[maxPacket];
nws.Read(packet, 0, maxPacket);
string result = Encoding.Unicode.GetString(packet).TrimEnd('\0'); //字节流转为字符串并把后面null去掉
if (result == error) 报错;

10、对话框最大化,并且不覆盖任务栏
this.FormBorderStyle = FormBorderStyle.None;                            //对话框最大化,并且不覆盖任务栏
this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height); 
this.WindowState = FormWindowState.Maximized; 



总结: 1、关于C#的知识 (1)、文件输入输出—数据流 1、FileStream类 例子: SqlDataReader reader = job.WriteFileToTxt(); FileStream jobStream = new FileStream(@fileName,FileMode.Open,FileAccess.ReadWrite);//覆盖 //FileStream jobStream = new FileStream(@fileName, FileMode.Append, FileAccess.Write);//追加 StreamWriter streamw = new StreamWriter(jobStream); string outfiles = null; streamw.WriteLine("此次任务信息如下:"); streamw.WriteLine("outfiles");//读取完毕后换行 reader.Close(); streamw.Close(); jobStream.Close(); 数据流一定要用try/catch语句块包起来,同时,例子中的fileName是文件路径,如果是*.txt之类的则默认存储在程序 的文件夹下 FileMode有很多枚举成员,其中 1)Append是打开现有文件或者创建新文件,其只能和FileAccess.Write一起使用; 2)Create是如果文件不存在,则使用CreateNew,否则使用Truncate,其要求FileIOPermissionAccess.Write; 3)CreateNew创建新文件,要求FileIOPermissionAccess.Write,如果文件存在则异常; 4)Open打开现有文件,能力取决于FileAccess的值(Read,Write,ReadWrite),如果文件存在则异常; 5)OpenOrCreate打开或创建,FileAccess.Read--FileIOPermissionAccess.Read,FileAccess.Write/ReadWrite-- FileIOPermissionAccess.Write,FileAccess.Append--FileIOPermissionAccess.Append; 6)Truncate打开现有文件,文件一旦打开将被截断为零字节,试图从使用Truncate打开的文件中进行读取将异常 注:SqlDataReader使用后一定要关闭 2、写文本文件 string text = Console.ReadLine(); StreamWriter streamw = File.CreateText(@"E:\test3.txt"); streamw.WriteLine(text); streamw.Close(); 读取文本文件 string txt = ""; StreamReader sr = new StreamReader(@"E:\test.txt"); while (!sr.EndOfStream) { string str = sr.ReadLine(); txt += str + "\n"; } sr.Close(); Console.Write(txt); Console.Read(); (2)、产品的框架 1)Model类:对象层,制定对象的属性和方法; 2)IDAL类:接口层,定义在SQLDAL中需要使用的方法; 3)SQLDAL类:数据持久层,实现接口中的方法,用DBUtility类中包装的SQL方法操作数据库; 4)BLL类:业务逻辑层,定义调用SQLDAL类中的方法,被WEB类中的事件调用,联系数据持久层和WEB表示层,中间桥梁 ; 5)DALFactory类:创建接口类型的CREATE方法,在SQLDAL中创建接口对象; 6)DBUtility类:创建各种SQL方法,实现数据的调用; 7)WEB类:表示层,设计页面格式(HTML)和实现各种事件(JavaScript) (3)c#中执行sql语句时传递参数的小经验 1> 直接写入法: 例如: int Id =1; string Name="lui"; cmd.CommandText="insert into TUserLogin values("+Id+",'"+Name+"')"; 因为Id是数值,所以在传递的时候只需要在sql字符串中用"+Id+"即可实现,而Name是字符串,所以在传递的时候还需 要在"+Name+"两边各加一个单引号(')来 实现; 2>给命令对象添加参数法: 例如: int Id =1; string Name="lui"; cmd.CommandText="insert into TUserLogin values(@Id,@Name)"; //上条语句中直接在sql语句中写添加的参数名,不论参数类型都是如此. SqlParameter para=new SqlParameter("@Id",SqlDbType.int,4);//生成一个名字为@Id的参数,必须以@开头表 示是添加的参数,并设置其类型长度,类型长度与数据库中对应字段相同 para.Value=Id;//给参数赋值 cmd.Parameters.Add(para);//必须把参数变量添加到命令对象中去。 //以下类似 para=new SqlParameter("@Name",SqlDbType.VarChar,16); para.Value=Name; com.Parameters.Add(para); 然后就可以执行数据库操作了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值