【1】重用项目窗体解决方案:
1. 把FmMain.cs 和 FmMain.Designer.cs 和 FmMain .resx 三个文件复制到程序目录下;
2. 在vs里面添加现有项, 选择FmMain.cs, 不用选择其它文件, 完成操作后重新打开窗口。
【2】无法读写注册表解决方案
程序读写注册表是,通过代码将以下注册表路径下的Enabled值修改为0:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy
实现代码如下:
public void SetFipsAlgorithmPolicyValue() { string keyName = @"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy"; if (Convert.ToBoolean(Registry.GetValue(keyName, "Enabled", null))) { Registry.SetValue(keyName, "Enabled", 0, RegistryValueKind.DWord); } }
【3】WinForm设置窗体控件双缓冲代码:
using System.Windows.Forms; class ListViewEx:ListView { public ListViewEx() { SetStyle(ControlStyles.DoubleBuffer | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true); UpdateStyles(); } }
【4】MSDN推荐的Lock对象:自定义类推荐用私有的只读静态对象
通常,最好避免锁定 public 类型或锁定不受应用程序控制的对象实例。例如,如果该实例可以被公开访问,则 lock(this) 可能会有问题,因为不受控制的代码也可能会锁定该对象。这可能导致死锁,即两个或更多个线程等待释放同一对象。出于同样的原因,锁定公共数据类型(相比于对象)也可能导致问题。而且lock(this)只对当前对象有效,如果多个对象之间就达不到同步的效果。而自定义类推荐用私有的只读静态对象,比如:private static readonly object obj = new object();为什么要设置成只读的呢?这时因为如果在lock代码段中改变obj的值,其它线程就可以执行lock锁定的代码片段。
【5】C#匹配a标签各个参数的正则表达式:
string regex = "(?is)<a[^>]*(style=[\"‘])?(?<style>[^\"‘]*?)[\"‘][^>]*(href=[\"‘])?(?<url>[^\"‘]*?)[\"‘][^>]*>(?<text>[\\w\\W]*?)</a>";
需求改变,以上的正则表达式也需要进行适当修改
[^"] 不是表示双引号的任意字符 ,* 表示重复0到多次
所以 ([^"]*) 是匹配非双引号字符组成的字符串
Q:经常看见的正则前面的 (?i) (?s) (?m) (?is) (?im) 是什么意思?
A: 称为内联匹配模式,通常用内联匹配模式代替使用枚举值RegexOptions指定的全局匹配模式,写起来更简洁。
(?i) 表示所在位置右侧的表达式开启忽略大小写模式
(?s) 表示所在位置右侧的表达式开启单行模式。
更改句点字符 (.) 的含义,以使它与每个字符(而不是除 \n 之外的所有字符)匹配。
注意:(?s)通常在匹配有换行的文本时使用
(?m) 表示所在位置右侧的表示式开启指定多行模式。
更改 ^ 和 $ 的含义,以使它们分别与任何行的开头和结尾匹配,
而不只是与整个字符串的开头和结尾匹配。
注意:(?m)只有在正则表达式中涉及到多行的“^”和“$”的匹配时,才使用Multiline模式。
上面的匹配模式可以组合使用,比如(?is),(?im)。
另外,还可以用(?i:exp)或者(?i)exp(?-i)来指定匹配的有效范围。
【6】关于SQL Server数据库连接字符串的特殊参数说明
MultipleActiveResultSets和Mars_Connection同义,指定此数据库连接是否复用数据库内已建立的相同用户的连接。如为True时,建立数据库连接时会先查询服务器上是否已为此用户建立连接,如已建立则直接复用此连接。默认值为False。将MultipleActiveResultSets设置为True可以提高效率。
Persist Security Info = True时,表明采用集成安全机制;若为False,则表明不采用集成安全机制,默认值为False。
【7】解决错误:System.ArgumentException: 另一个 SqlParameterCollection 中已包含 SqlParameter 的方案
错误详细信息:
System.ArgumentException: 另一个 SqlParameterCollection 中已包含 SqlParameter。
具体原因:
声明的SqlParameter数组,而在循环的内部,每一次执行ExecuteNonQuery都由该方法内部的IDbCommand.Parameters.Add(IDbDataParameter)将SqlParameter数组添加到IDbCommand的IDataParameterCollection中。而framework机制限制两个IDataParameterCollection指向同一个对象。虽然ExecuteNonQuery方法内部声明了一个IDbCommand的临时对象,理论上讲,这个包含了IDataParameterCollection的IDbCommand对象会在ExecuteNonQuery方法结束时从内存中释放。但是实际上可能是由于垃圾回收机制并没有将IDbCommand临时对象即时的回收,而且改对象绑定的Parameter集合也存在,就像一个DropDownList添加Item一样。所以在下一次操作执行的时候,会导致两个IDataParameterCollection指向同一个对象,此时出现问题。
解决方案一:
在每次操作时,重新生成对象,但这样会产生大量的垃圾变量,不可取。
解决方案二:
将使用完之后的Command命令的Parameters集合清空。
调用代码如下:
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear();
【8】js页面跳转 和 js打开新窗口方法
第一种: <script language="javascript" type="text/javascript"> window.location.href="http://www.xlfun.com/login.php?backurl="+window.location.href; </script> 第二种: <script language="javascript"> alert("返回"); window.history.back(-1); </script> 第三种: <script language="javascript"> window.navigate("xlfun.php"); </script> 第四种: <script language="JavaScript"> self.location=‘xlfun.htm‘; </script> 第五种: <script language="javascript"> alert("非法访问!"); top.location=‘xlfun.html; </script>
1.在原来的窗体中直接跳转用
window.location.href="你所要跳转的页面";
2、在新窗体中打开页面用:
window.open(‘你所要跳转的页面‘);
window.history.back(-1);返回上一页
3、一些用法
按钮式: <input name="pclog" type="button" value="/GO" onClick="location.href=‘连接地址‘"> 链接式: <a href="javascript:history.go(-1)">返回上一页</a> <a href="<%=Request.ServerVariables("HTTP_REFERER")%>">返回上一页</a> 直接跳转式: <script>window.location.href=‘连接地址‘;</script> 开新窗口: <a href="/javascript:" onClick="window.open(‘http://www.dolalre.com.cn‘,‘‘,‘height=500,width=611,scrollbars=yes,status =yes‘)">123</a> <script> window.open(‘xlfun.html‘,‘newwindow‘,‘height=100,width=400,top=0,left=0,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no, status=no‘) </script>
脚本运行后,page.html将在新窗体newwindow中打开,宽为100,高为400,距屏顶0象素,屏左0象素,无工具条,无菜单条,无滚动条,不可调整大小,无地址栏,无状态栏。
【9】解决错误:从客户端(Content="<p>测试</p>")中检测到有潜在危险的 Request.Form 值
.NetFrameWork 4.0 Validaterequest="false"不起作用,需要恢复到2.0的ASP.NET请求验证功能的行为,要在以下设置 Web.config文件中的system.web节点修改 requestValidationMode 的值为“2.0”:
<httpRuntime requestValidationMode="2.0"/>
值得注意的是,需要同时在页面和配置文件里配置 Validaterequest="false" 才会生效。即使是.NetFrameWork 4.0 或者 .NetFrameWork 4.5,也可以使用2.0的验证方式。
不过这样做会增加网站的安全风险,需要谨慎使用。
【10】C#内存释放的几个方法对比: