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 */  

 

 

posted on 2005-03-31 16:46  dragonpro  阅读(1034)  评论(0编辑  收藏  举报

Free Web Counter