C# 一些小问题收集
1. 怎么判断一个字符串的内容为数字?
最佳答案是使用正则表达式判断
string str;
...
int i;
if(str != null && Regex.IsMatch(str,@"^\d+$"))
i = int.Parse(str);
2. 怎样使用WebService传输文件?
这里有两个办法
一个是使用byte[]传递,一个是使用WSE附件传递
前面一个:
[WebMethod]
public byte[] GetFileData(string requestFileName)
{
// 这里打开一个文件,返回文件的byte[]
}
[WebMethod]
public void SetFileData(byte[] data)
{
// 这里用data(参数)生成需要的文件
}
※※※※※※※※※※※※※※※※※※※※※※※※※※※
如何退出Win Form程序?
Application.Exit();
※※※※※※※※※※※※※※※※※※※※※※※
==============什么是映像?
所有的 .NET 编译器都产生关于它们所产生的模块中的类型定义的特殊数据。这些特殊数据同模块封装在一起 (随后模块被封装到元件中),可以通过称为映像 的机制来访问。System.Reflection 命名空间中包含向模块或元件询问其类型的类。
使用映像来访问 .NET 的特殊数据同使用 ITypeLib/ITypeInfo 来访问 COM 中的类型库数据非常相似,而且使用的目的也很相似—例如确定数据类型大小,以便在上下文、进程、机器的边界间调度它们。
映像还可以被用来动态调用方法 (参见 System.Type.InvokeMember),甚至在运行时动态创建类型 (参见 System.Reflection.Emit.TypeBuilder )。
=================什么是应用程序域?
应用程序域 (AppDomain) 可以被看作一个轻型的进程。在一个 Win32 进程中可以存在多个 AppDomain。AppDomain 的主要目的是将应用程序和其它应用程序隔离开来。
通过使用独立的地址空间,Win32 进程提供隔离性。这种方法很有效,但开销很大并且伸缩性不好。.NET 运行库通过控制对内存的是用来施加 AppDomain 隔离—AppDomain 中的所有内存是由 .NET 运行库来管理的,所以运行库可以确保 AppDomain 之间不能访问彼此的内存。
※※※※※※※※※※※
在ASP.NET程序中,如何知道用户有没有安装1.0版本的.NET框架?
使用Request.Browser.ClrVersion属性只返回用户安装的最高版本。
使用Request.Browser.GetClrVersions()方法可以做到
※※※※※※※
在平台互操作中,在C#中union该怎么用?
例子:一个整型或字符的union
[ StructLayout(LayoutKind.Explicit) ]
public struct MyUnion
{
[ FieldOffset(0) ] public Int16 val2;
[ FieldOffset(0) ] public char val1;
}
※※※※※※※※※※※※
新版本下写的程序在旧版本中打不开?
新版本下写的程序在旧版本中打不开?我用vs.net打开别人用他的vs.net写的程序打不开,说是不能打开新版本的程序。
该怎么解决啊?要重新买新版本的安装盘还是装个补丁?谢谢先!:)
---------------------------------------------------------------
把.csproj和.sln中的
ProductVersion = "7.10.XXXX"
SchemaVersion = "2.0"
改成
ProductVersion = "7.0.9466"
SchemaVersion = "1.0"
就可以了。
---------------------------------------------------------------
VS.NET 2003 和 VS.NET 2002 工程和解决方案互换工具免费下载。
http://jsp.mobikom.com/stoyan/vspc/vspc.html
※※※※※※※
窗体的淡入淡出:
for(double d=0d; d<=1d; d+=0.2d)
{
System.Threading.Thread.Sleep(30);
Application.DoEvents();
this.Opacity=d;
this.Refresh();
}
※※※※※※※※※※※
下面这几段是关于DataGrid中人们经常问到的问题:
1、怎样将 ComboBox 控件添加到 Windows 窗体 DataGrid 控件?
2、怎样将 DataGrid 列宽设置为最长的字段?
3、怎样对 DataGrid Windows 控件执行分页?
其中,这几题的答案其实在Microsoft的网站上都可以找到标准答案。为了大家少送点分,共享出来给大家吧。
1、http://support.microsoft.com/default.aspx
2、http://support.microsoft.com/default.aspx
3、http://support.microsoft.com/default.aspx
其中第三题还有一个是用Visual Basic .NET实现的:
http://support.microsoft.com/default.aspx
※※※※※※※※※※※※※※※※※※※※※※※※
还有,关于C#对Excel的操作与控制,其实是非常简单的,但是在CSDN里面,一抓一大巴,可以看一下我以前写的一篇文章:C#调用操作Excel的一个类(http://dev.csdn.net/develop/article/21/21391.shtm)
如果你想从SQL等类的数据库里面快速导出数据到Excel里面的话,你可以看一下这一篇:通过Excel自带的查询分析器快速完成从SQL Server中导出数据的例子(http://dev.csdn.net/develop/article/22/22183.shtm)
※※※※※※※※※※※※※※
对多个command对象使用一个事务:
OleDbConnection cn = new OleDbConnection(联接字符串);
OleDbCommand comm1 = new OleDbCommand("Sql存储过程",cn );
comm1.CommandType = CommandType.StoredProcedure;
OleDbCommand comm2 = new OleDbCommand("Sql存储过程",cn );
comm2.CommandType = CommandType.StoredProcedure;
OleDbCommand comm3 = new OleDbCommand("Sql存储过程",cn );
comm3.CommandType = CommandType.StoredProcedure;
cn.Open();
OleDbTransaction trans = cn.BeginTransaction();
comm1.Transaction = trans;
comm2.Transaction = trans;
comm3.Transaction = trans;
try
{
comm1.ExecuteNonQuery();
comm2.ExecuteNonQuery();
comm3.ExecuteNonQuery();
trans.Commit();
}
catch(Exeeption ex)
{
trans.RollBack();
}
finally
{
cn.Close();
}
※※※※※※※※
有的时候,如果在本机上打开了一个相同的程序,可能会对系统的安全有所顾忌。那么,如何实现在同一台机子上,让它不能打开相同的程序呢?
方法:改写程序启动的函数(main())。
具体方法:
[STAThread]
static void Main()
{
int ProceedingCount = 0;
Process[] ProceddingCon = Process.GetProcesses();
foreach(Process IsProcedding in ProceddingCon)
{
if(IsProcedding.ProcessName == Process.GetCurrentProcess().ProcessName)
{
ProceedingCount += 1;
}
}
if(ProceedingCount > 1)
{
MessageBox.Show("该系统已经在运行中。","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
else
{
Application.EnableVisualStyles();
Application.DoEvents();
Application.Run(new [本系统的主界面]());
}
}
※※※※※※※※※※※※※※※
如何构造一个正则表达式,用来匹配含有嵌套的C#块注释,例如:/* ……/*……*/……*/
可以用:/\*.{0,}/\*.{0,}\*/.{0,}\*/
用这个RegExp可以匹配的字符串例如:
/* adsf/* /* sdfa */ adfa */
/* adsf/* sdfa */ adfa */
kjh /* adsf sdfa /**/adfa */ lkj
不能匹配的例如:
/* adsf/* sdfa adfa */
/* adsf sdfa adfa */