用户操作
[即时聊天] [发私信] [加为好友]
方清ID:fangq
32818次访问,排名3574好友0人,关注者39
青春映像,风舞枫扬
fangq的文章
原创 40 篇
翻译 0 篇
转载 4 篇
评论 88 篇
最近评论
yuboswing:写的太好了!
yuboswing:新手上路,偶遇大师文章。钦佩之至!
rain705:很喜欢你的文章
iq263me:程序员后花园,累了来看看 bbs.iq263.cn
lijunen:不错,受益非浅!
文章分类
收藏
    相册
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 翻译 一些很酷的.Net技巧收藏

    新一篇: asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式 | 旧一篇: TripleDES加密、解密算法

     

    原作出处:http://www.codeproject.com/useritems/tips.asp?df=100

    一..Net Framework

    1.  如何获得系统文件夹

    使用System.Envioment类的GetFolderPath方法;例如:

    Environment.GetFolderPath( Environment.SpecialFolder.Personal )

    2.  如何获得正在执行的exe文件的路径

    1)  使用Application类的ExecutablePath属性

    2)  System.Reflection.Assembly.GetExecutingAssembly().Location

    3.  如何检测操作系统的版本

    使用EnviomentOSVersion属性,例如:

    OperatingSystem os = Environment.OSVersion;

    MessageBox.Show(os.Version.ToString());

    MessageBox.Show(os.Platform.ToString());

    4.  如何根据完整的文件名获得文件的文件名部分、

    使用System.IO.Path类的方法GetFileName或者GetFileNameWithoutExtension方法

    5.  如何通过文件的全名获得文件的扩展名

    使用System.IO.Path.GetExtension静态方法

    6.  Vbc#的语法有什么不同click here

    7.  如何获得当前电脑用户名,是否联网,几个显示器,所在域,鼠标有几个键等信息

    使用System.Windows.Forms. SystemInformation类的静态属性

    8.  修饰Main方法的[STAThread]特性有什么作用

    标示当前程序使用单线程的方式运行

    9.  如何读取csv文件的内容

    通过OdbcConnection可以创建一个链接到csv文件的链接,链接字符串的格式是:"Driver={Microsoft Text Driver (*.txt;*.csv)};Dbq="+cvs文件的文件夹路径+"          Extensions=asc,csv,tab,txt; Persist Security Info=False";

    创建连接之后就可以使用DataAdapter等存取csv文件了。

    详细信息见此处

    10. 如何获得磁盘开销信息,代码片断如下,主要是调用kernel32.dll中的GetDiskFreeSpaceEx外部方法。

     

    public sealed class DriveInfo
    {
        [DllImport(
    "kernel32.dll", EntryPoint = "GetDiskFreeSpaceExA")]
        
    private static extern long GetDiskFreeSpaceEx(string lpDirectoryName,
            
    out long lpFreeBytesAvailableToCaller,
            
    out long lpTotalNumberOfBytes,
            
    out long lpTotalNumberOfFreeBytes);

        
    public static long GetInfo(string drive, out long available, out long total, out long free)
        
    {
            
    return GetDiskFreeSpaceEx(drive, out available, out total, out free);
        }


        
    public static DriveInfoSystem GetInfo(string drive)
        
    {
            
    long result, available, total, free;
            result 
    = GetDiskFreeSpaceEx(drive, out available, out total, out free);
            
    return new DriveInfoSystem(drive, result, available, total, free);
        }

    }


    public struct DriveInfoSystem
    {
        
    public readonly string Drive;
        
    public readonly long Result;
        
    public readonly long Available;
        
    public readonly long Total;
        
    public readonly long Free;

        
    public DriveInfoSystem(string drive, long result, long available, long total, long free)
        
    {
            
    this.Drive = drive;
            
    this.Result = result;
            
    this.Available = available;
            
    this.Total = total;
            
    this.Free = free;
        }

    }


     

    可以通过

    DriveInfoSystem info = DriveInfo.GetInfo("c:");来获得指定磁盘的开销情况

     

    11.如何获得不区分大小写的子字符串的索引位置

             1)通过将两个字符串转换成小写之后使用字符串的IndexOf方法:

     

    string strParent = "The Codeproject site is very informative.";

    string strChild = "codeproject";

    // The line below will return -1 when expected is 4.
    int i = strParent.IndexOf(strChild);

    // The line below will return proper index
    int j = strParent.ToLower().IndexOf(strChild.ToLower());

     

            2) 

    一种更优雅的方法是使用System.Globalization命名空间下面的CompareInfo类的IndexOf方法:

     

    using System.Globalization;

    string strParent = "The Codeproject site is very informative.";

    string strChild = "codeproject";
    // We create a object of CompareInfo class for a neutral culture or a culture insensitive object
    CompareInfo Compare = CultureInfo.InvariantCulture.CompareInfo;

    int i = Compare.IndexOf(strParent,strChild,CompareOptions.IgnoreCase);

     

    . OOPs

    1. 什么是复制构造函数

      我们知道构造函数是用来初始化我们要创建实例的特殊的方法。通常我们要将一个实例赋值给另外一个变量c#只是将引用赋值给了新的变量实质上是对同一个变量的引用,那么我们怎样才可以赋值的同时创建一个全新的变量而不只是对实例引用的赋值呢?我们可以使用复制构造函数。

    我们可以为类创造一个只用一个类型为该类型的参数的构造函数,如:

     

    public Student(Student student)
    {
     
    this.name = student.name;
    }

     

    使用上面的构造函数我们就可以复制一份新的实例值,而非赋值同一引用的实例了。

    class Student
    {
         
    private string name;

         
    public Student(string name)
         
    {
             
    this.name = name;
         }

         
    public Student(Student student)
         
    {
             
    this.name = student.name;
         }


        
    public string Name 
        
    {
           
    get 
           
    {
                  
    return name; 
           }

           
    set 
           
    {
                name 
    = value; 
           }

        }

    }


    class Final

    {

        
    static void Main()

          
    {

            Student student 
    = new Student ("A");

            Student NewStudent 
    = new Student (student);

            student.Name 
    = "B";

            System.Console.WriteLine(
    "The new student's name is {0}", NewStudent.Name);

          }


    }

     

    The new student's name is A.

    2.什么是只读常量

    就是静态的只读变量,它通常在静态构造函数中赋值。 

    class Numbers
    {
        
    public readonly int m;
        
    public static readonly int n;

        
    public Numbers (int x)
        
    {
           m
    =x;
        }


        
    static Numbers ()
        
    {
            n
    =100;
        }


     }
     //其中n就是一个只读的常量,对于该类的所有实例他只有一种值,而m则根据实例不同而不同

     

    三.VS.Net IDE

    1. 2请看原作

    3.如何改变region的颜色

       通过工具 à 选项 à 环境 à 字体和颜色 à 可折叠文本设置

     

    四.WinForm

    1.如何使winForm不显示标题栏?

    通过设置formText属性为空字符串,设置ControlBox属性为false

    form1.Text = string. Empty;

    form1.ControlBox = false;

    2.如何使winform的窗体使用XP的风格

    见原作

    3.如何禁止form在工具栏显示

    设置formShowInTaskbar属性为false即可

    4.如何使程序打开默认的邮件程序并带有一些参数让用户开始写邮件

             1)如果是web程序:

             <a href=”mailto:email@address1.com,email@address2.com?cc=email@address3.com&Subject=Hello&body=Happy New Year”>some text</a>

             2) 对于windows程序,需要使用System.Diagnostics.Process

    Process process = new Process();
    process.StartInfo.FileName 
    = "mailto:email@address1.com,email@address2.com?subject=Hello&cc=email@address3.com
    &bcc=email@address4.com&body=Happy New Year" ;

    process.Start();

    5.如何创建类似msn提示窗口

    需要获得通过Screen.GetWorkingArea(this).WidthHeight)属性获得屏幕的大小,然后使用一个timer根据时间改变窗口的位置

    五.Button控件

    1.如何设置form的默认button(即在form上按下回车时触发的button

             可以设置formAcceptButton属性:form1.AcceptButton = button1;

    2. 如何设置form的取消button(即在用户按下Esc键时触发的button

             可以设置formCancelButton属性:form1.CancelButton = buttonC;

    3. 如何通过程序触发一个buttonClick事件

             Button1.PerformClick

     

    六.Combo Box

    1.如何使用可选字体填充Combo Box

    comboBox1.Items.AddRange (FontFamily.Families);

     

    七.TextBox

    1.如何禁用TextBox的默认上下文菜单(右键菜单)

    textBox1.ContextMenu = new ContextMenu();

    2,3 见原作

    4.如何在TextBox获得焦点的时候,将焦点放在textBox文字的最后

    textBox1.SelectionStart = textBox1.Text.Length;

    发表于 @ 2008年07月23日 11:04:00|评论(loading...)|编辑|收藏

    新一篇: asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式 | 旧一篇: TripleDES加密、解密算法

    评论

    #mmcjr 发表于2008-07-23 14:59:41  IP: 121.9.230.*
    知道一点点,不全知道
    #lonegunman 发表于2008-07-23 16:20:58  IP: 218.83.157.*
    1. 什么是复制构造函数

    我们知道构造函数是用来初始化我们要创建实例的特殊的方法。通常我们要将一个实例赋值给另外一个变量c#只是将引用赋值给了新的变量实质上是对同一个变量的引用,那么我们怎样才可以赋值的同时创建一个全新的变量而不只是对实例引用的赋值呢?我们可以使用复制构造函数。

    我们可以为类创造一个只用一个类型为该类型的参数的构造函数,如:




    public Student(Student student)
    {
    this.name = student.name;
    }



    使用上面的构造函数我们就可以复制一份新的实例值,而非赋值同一引用的实例了。

    class Student
    {
    private string name;

    public Student(string name)
    {
    this.name = name;
    }
    public Student(Student student)
    {
    this.name = student.name;
    }

    public string Name
    {
    get
    {
    return name;
    }
    set
    {
    name = value;
    }
    }
    }

    class Final

    {

    static void Main()

    {

    Student student = new Student ("A");

    Student NewStudent = new Student (student);

    student.Name = "B";

    System.Console.WriteLine("The new student's name is {0}", NewStudent.Name);

    }

    }



    The new student's name is A.

    代码结果是对的,但是对你的理解我不敢苟同,在你student.Name="B"之前事实上两个Student的Name指向同一个string对象,这点你可以通过打印GetHashCode得到。
    事实上这里并没有任何的复制,student的Name指向"A",然后NewStudent的Name被赋予student的Name的值,也就是"A"的地址,然后你更改了student的Name的值到"B"的地址,而这
    #indexchen 发表于2008-07-24 10:41:46  IP: 222.66.147.*
    调用系统函数获得些系统信息,有什么酷的?幼稚
    #wangzhe1945 发表于2008-07-24 11:15:36  IP: 60.180.144.*
    复制构造函数,其实还是字符串引用
    #wangzhe1945 发表于2008-07-24 11:16:12  IP: 60.180.144.*
    其他的还是挺不错的
    #wangzhe1945 发表于2008-07-24 11:16:14  IP: 60.180.144.*
    其他的还是挺不错的
    #wangzhe1945 发表于2008-07-24 11:16:17  IP: 60.180.144.*
    其他的还是挺不错的
    #wangzhe1945 发表于2008-07-24 11:16:18  IP: 60.180.144.*
    其他的还是挺不错的
    #tangyanjiayou 发表于2008-07-24 11:47:21  IP: 211.151.91.*
    收了,谢谢楼主共享!
    #IDisposable 发表于2008-07-24 12:35:56  IP: 128.222.37.*
    支持楼主!
    #gxj760998 发表于2008-07-24 17:32:33  IP: 119.141.220.*
    晕!就这么点深度就说酷
    #gxj760998 发表于2008-07-24 17:33:35  IP: 218.16.73.*
    晕!就这么点深度就说酷
    #thezoner 发表于2008-07-24 21:10:30  IP: 120.32.210.*
    QQ日志
    #n_yHHy_n 发表于2008-07-24 22:54:35  IP: 218.60.100.*
    good
    #gaoning87 发表于2008-07-24 22:57:52  IP: 60.222.106.*
    &Cool=hfuiah@dhau!@$$!!
    #gaoning87 发表于2008-07-24 22:58:06  IP: 60.222.106.*
    &Cool=hfuiah@dhau!@$$!!
    #Sea_7 发表于2008-07-25 09:16:27  IP: 61.150.7.*
    这都是基本知识啊!!
    晕。。。。。
    #MasDn 发表于2008-07-25 09:53:47  IP: 222.66.56.*
    http://www.flywud.com
    不错 值得收藏
    #soft_fair 发表于2008-07-25 09:54:50  IP: 60.191.114.*
    也没怎么个酷么
    看看这个:http://www.sula.cn
    #zad522 发表于2008-07-25 20:46:13  IP: 218.94.142.*
    no cool actually.
    #txgaozhao 发表于2008-07-25 23:10:03  IP: 116.228.217.*
    好东西啊,www.ismymy.com
    #lxlnet 发表于2008-07-26 13:39:55  IP: 124.129.174.*
    %%%%%%%%
    #JunsGo 发表于2008-07-26 20:36:44  IP: 220.250.26.*
    不错,整理的不错
    #gaozengping2008 发表于2008-07-27 10:52:56  IP: 116.215.213.*
    哈哈 不错
    #bindsang 发表于2008-07-27 16:02:08  IP: 61.49.253.*
    The new student's name is A.

    代码结果是对的,但是对你的理解我不敢苟同,在你student.Name="B"之前事实上两个Student的Name指向同一个string对象,这点你可以通过打印GetHashCode得到。
    事实上这里并没有任何的复制,student的Name指向"A",然后NewStudent的Name被赋予student的Name的值,也就是"A"的地址,然后你更改了student的Name的值到"B"的地址,而这

    M$从来都没有说过对于string来说GetHashCode相同就是指向同一个字符串,只能证明两个字符串的值是一样的罢了
    #bindsang 发表于2008-07-27 16:02:16  IP: 61.49.253.*
    The new student's name is A.

    代码结果是对的,但是对你的理解我不敢苟同,在你student.Name="B"之前事实上两个Student的Name指向同一个string对象,这点你可以通过打印GetHashCode得到。
    事实上这里并没有任何的复制,student的Name指向"A",然后NewStudent的Name被赋予student的Name的值,也就是"A"的地址,然后你更改了student的Name的值到"B"的地址,而这

    M$从来都没有说过对于string来说GetHashCode相同就是指向同一个字符串,只能证明两个字符串的值是一样的罢了
    #mayoyam 发表于2008-07-29 20:14:02  IP: 59.82.100.*
    不错 值得收藏
    #cskingdeng 发表于2008-07-31 13:35:47  IP: 211.161.120.*
    MessageBox.Show("Cool...");
    #cskingdeng 发表于2008-07-31 13:36:00  IP: 59.111.16.*
    MessageBox.Show("Cool...");
    #jayasme 发表于2008-08-01 23:13:56  IP: 222.244.118.*
    写这么多,辛苦了,不过大部分早就都知道了
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © fangq