木子屋 Dnawo's BLOG

分类:Web编程

共 944 篇

PictureBox加载图片后无法删除解决方法

PictureBox加载图片后,再将Image属性值设置为null,但本地图片仍无法删除,提示文件正被另一个程序使用,相关代码: 究其原因应是Image属性值设置为null,但资源仍未释放,需等垃圾回收器回收,那我们就手动释放资源再测试下: 终于可以删除了!但如果图片在使用中时试图删除图片,上边代码又不行了,解决方法是将本地图片读到内存流(相当于复制一份图片),再将内存流转化为Image对象并绑定到PictureBox的Image属性,这样原图可正常删除,代码如下:

使用MemoryStream与FileStream

编程访问文件是通过文件流对象进行的,当应用程序需要访问文件时,必须先创建一个文件流对象,此流对象和文件是一一对应关系。 在.NET中,使用抽象基类System.IO.Stream代表流,它提供Read和Write两个方法。由于数据流的有序性,因此流对象还有一个读写指针,为此,Stream类还有一个Seek方法用于移动读写指针。 ·FileStream对象的数据来自文件,而MemoryStream对象的数据来自内存缓冲区。这两个类都继承自Stream类。 ·MemoryStream的数据来自内存中的一块连续区域,这块区域称为"缓冲区(Buffer)"。可以把缓冲区看成一个数组,每个数组元素可以存放一个字节的数据。…

C#正则表达式之分组构造示例

我们常用的分组构造语法为:(子表达式),例如: 该语法捕获的子表达式存放在一个索引数组中,使用match.Groups.Value获取值,Groups.Value表示完整字符串,Groups.Value表示第1个括号内容,Groups.Value表示第2个括号内容,依此类推。 下边介绍另一种分组构造,语法为:(?子表达式),它将捕获的子表达式存放在一个关联数组中,使用match.Groups.Value获取值,例如:

??运算符(C#)

??是一个二元运算符,当左边操作数为null时返回右边操作数,否则返回左边操作数。例如: 2 ?? 1; //结果:2 null ?? 1; //结果:1 这在可空类型运算时比较有用: 若不用??运算符,会提示将int?转换为int缺少显示转换,加入显示转换后,如果a的值为null,程序运行错误(System.InvalidOperationException)。 此外,在某些场合中,??还可以代替?:使用,简化输入: 注意:??运算符两个操作数类型必须一致!

比较VB.NET的And和C#的&&

先看两个例子: VB.NET: C#: 可见,当第一个条件为Flase时,VB.NET仍会再判断第二个条件,而C#则不理会第二个条件,直接返回结果。当第二条件依赖于第一个条件时,VB.NET语句结构得稍加修改,否则程序可能出错: 正确的写法: C#则比较简洁: VB.NET的Or和C#的||也有类似的结果,当第一个条件为True时,VB.NET仍会判断第二个条件,而C#则直接返回结果!

C#获取Unix时间戳

Unix时间戳是指从1970-01-01 00:00:00开始到某个时间所经历的秒数,C#没有相关方法直接获取,网上搜了两个相关方法:

.NET数据集(xsd)使用in查询

在数据集(xsd)中有时我们要进行in查询: vs自动为我们生成了方法: 注意,这边id是int类型,虽然在属性面板中我们可以将id改为string类型,但最终仍是不能查询: 变通下,使用charindex代替in可实现要求: ACCESS版:

一句话完成多条件查询

例如有这么一张表: 有时我们需要根据名字进行查询; 有时我们需要根据年龄进行查询; 有时又需要根据名字和年龄进行查询; 以前都是通过拼接sql语句完成: 今天发现不用拼接sql语句,一句话就能完成sql多条件查询: MSSQL版: ACCESS版:

.NET数据集(xsd)使用模糊查询

当指定如下SQL语句进行查询时: 生成的方法为: 参数CompanyName丢失了,SQL语句稍做修改: 这样生成的方法为: 总算正确了,调用如下: 注意添加%!

C# short转byte

short占2个字节,byte占1个字节,因而不能直接将short转换成byte,如果强制进行转换,结果可能会不正确。正确的做法是将一个short转为一个byte: 我们知道,每个Unicode字符占用2个字节,那么按上边的思路将Unicode字符转成byte也就容易了: 测试发现:short的取值范围为,将编码大于32767的字符转为short时结果为负数,但不影响转化成byte的结果,也可考虑将short转换成ushort。