七个C#编程的小技巧

编程|技巧

一、最小化窗口

点击“X”或“Alt+F4”时,最小化窗口,
如:
protected override void WndProc(ref Message m)
{
const int WM_SYSCOMMAND = 0x0112;
const int SC_CLOSE = 0xF060;
if (m.Msg == WM_SYSCOMMAND && (int) m.WParam == SC_CLOSE)
{
// User clicked close button
this.WindowState = FormWindowState.Minimized;
return;
}
base.WndProc(ref m);
}

二、如何让Foreach 循环运行的更快
foreach是一个对集合中的元素进行简单的枚举及处理的现成语句,用法如下例所示:
using System;
using System.Collections;
namespace LoopTest
{
class Class1
{
static void Main(string[] args)
{
// create an ArrayList of strings
ArrayList array = new ArrayList();
array.Add("Marty");
array.Add("Bill");
array.Add("George");
// print the value of every item
foreach (string item in array)
{
Console.WriteLine(item);
}
}
}
你可以将foreach语句用在每个实现了Ienumerable接口的集合里。如果想了解更多foreach的用法,你可以查看.NET Framework SDK文档中的C# Language Specification。

在编译的时候,C#编辑器会对每一个foreach 区域进行转换。IEnumerator enumerator = array.GetEnumerator();
try
{
string item;
while (enumerator.MoveNext())
{
item = (string) enumerator.Current;
Console.WriteLine(item);
}
}
finally
{
IDisposable d = enumerator as IDisposable;
if (d != null) d.Dispose();
}
这说明在后台,foreach的管理会给你的程序带来一些增加系统开销的额外代码。

三、将图片保存到一个XML文件
WinForm的资源文件中,将PictureBox的Image属性等非文字内容都转变成文本保存,这是通过序列化(Serialization)实现的,
例子://
using System.Runtime.Serialization.Formatters.Soap;
Stream stream = new FileStream("E:\\Image.xml",FileMode.Create,FileAccess.Write,FileShare.None);
SoapFormatter f = new SoapFormatter();
Image img = Image.FromFile("E:\\Image.bmp");
f.Serialize(stream,img);
stream.Close();

四、屏蔽CTRL-V
在WinForm中的TextBox控件没有办法屏蔽CTRL-V的剪贴板粘贴动作,如果需要一个输入框,但是不希望用户粘贴剪贴板的内容,可以改用RichTextBox控件,并且在KeyDown中屏蔽掉CTRL-V键,例子:

private void richTextBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if(e.Control && e.KeyCode==Keys.V)
e.Handled = true;
}

五、判断文件或文件夹是否存在
使用System.IO.File,要检查一个文件是否存在非常简单:
bool exist = System.IO.File.Exists(fileName);

如果需要判断目录(文件夹)是否存在,可以使用System.IO.Directory:
bool exist = System.IO.Directory.Exists(folderName);

六、使用delegate类型设计自定义事件
在C#编程中,除了Method和Property,任何Class都可以有自己的事件(Event)。定义和使用自定义事件的步骤如下:
(1)在Class之外定义一个delegate类型,用于确定事件程序的接口
(2)在Class内部,声明一个public event变量,类型为上一步骤定义的delegate类型
(3)在某个Method或者Property内部某处,触发事件
(4)Client程序中使用+=操作符指定事件处理程序

例子: // 定义Delegate类型,约束事件程序的参数
public delegate void MyEventHandler(object sender, long lineNumber) ;

public class DataImports
{
// 定义新事件NewLineRead
public event MyEventHandler NewLineRead ;

public void ImportData()
{
long i = 0 ; // 事件参数
while()
{
i++ ;
// 触发事件
if( NewLineRead != null ) NewLineRead(this, i);
//...
}
//...
}
//...
}

// 以下为Client代码

private void CallMethod()
{
// 声明Class变量,不需要WithEvents
private DataImports _da = null;
// 指定事件处理程序
_da.NewLineRead += new MyEventHandler(this.DA_EnterNewLine) ;
// 调用Class方法,途中会触发事件
_da.ImportData();
}
// 事件处理程序
private void DA_EnterNewLine(object sender, long lineNumber)
{
// ...
}

七、IP与主机名解析
使用System.Net可以实现与Ping命令行类似的IP解析功能,例如将主机名解析为IP或者反过来: private string GetHostNameByIP(string ipAddress)
{
IPHostEntry hostInfo = Dns.GetHostByAddress(ipAddress);
return hostInfo.HostName;
}
private string GetIPByHostName(string hostName)
{
System.Net.IPHostEntry hostInfo = Dns.GetHostByName(hostName);
return hostInfo.AddressList[0].ToString();
}

时间: 2025-01-05 02:07:39

七个C#编程的小技巧的相关文章

几个C#编程的小技巧 (二)

编程|技巧 一.判断文件或文件夹是否存在使用System.IO.File,要检查一个文件是否存在非常简单: bool exist = System.IO.File.Exists(fileName); 如果需要判断目录(文件夹)是否存在,可以使用System.IO.Directory:bool exist = System.IO.Directory.Exists(folderName); 二.使用delegate类型设计自定义事件在C#编程中,除了Method和Property,任何Class都可

几个C#编程的小技巧 (一)

编程|技巧 一.最小化窗口 点击"X"或"Alt+F4"时,最小化窗口,如:protected override void WndProc(ref Message m){const int WM_SYSCOMMAND = 0x0112;const int SC_CLOSE = 0xF060;if (m.Msg == WM_SYSCOMMAND && (int) m.WParam == SC_CLOSE){// User clicked close b

ASP编程的一个小技巧

编程|技巧 仅仅是一个方便编程的小技巧.该技巧可以让你在你的任何一个asp页面中都可以使用文件adovbs.inc中定义的常数变量,这样你写出来的程序更加易读和美观,注意,该方法只适应与IIS4.0以上版本.那就是在你的global.asa文件中加入这样一句代码即可.<!-- METADATA TYPE="typelib" UUID="00000200-0000-0010-8000-00AA006D2EA4" NAME="ADO Type Libra

JavaScript 小技巧(第七集)

javascript|技巧 第七集 如何去产生乱数 接下来我们要为你介绍一个可以产生乱数的函数,也是以 javascript 所写的这个函数只是利用了一点小技巧而已.而这种技巧在大部分的编译器(compiler)中,大都是如此(或类似)计算出乱数来的.相信 javascript 最后应也会以相似的方法来产生这样的method,如果它会提供这样功能的话,以下是此函数的结果: 这是一个计算产生的乱数.3861138662928667 以下是这个作法的写法 <head> <script lan

&amp;#106avascript 小技巧(第七集)

技巧 第七集 如何去产生乱数 接下来我们要为你介绍一个可以产生乱数的函数,也是以 JavaScript 所写的这个函数只是利用了一点小技巧而已.而这种技巧在大部分的编译器(compiler)中,大都是如此(或类似)计算出乱数来的.相信 JavaScript 最后应也会以相似的方法来产生这样的method,如果它会提供这样功能的话,以下是此函数的结果: 这是一个计算产生的乱数.3861138662928667 以下是这个作法的写法 <head> <script language="

QQ牧场的七个小技巧

QQ牧场已经对拥有相关等级的QQ用户开放,玩QQ牧场和玩其它游戏一样,需要讲究技巧,下面我们就为大家整理七则你必须知道的小技巧,希望对你有所帮助. 技巧1:关于金币.现在QQ牧场的金币和牧草是与QQ农场共通的.听说QQ牧场升级很耗金币,所以还没有开通QQ牧场的同学先要通过QQ农场挣大量的金币,适当的保留一些牧草.牧草的需求量并不是很大,基本1-2个田初期完全就可以养活小动物了. 技巧2:生产场所.动物是窝棚分养的,分成两类,一类窝养一类棚养.总可养数量在自己的等级上有显示. 技巧3:升级难度问题

C语言高效编程的几招小技巧

  这篇文章主要介绍了C语言高效编程的几招小技巧,本文讲解了以空间换时间.用数学方法解决问题以及使用位操作等编辑技巧,并给出若干方法和代码实例,需要的朋友可以参考下 引言: 编写高效简洁的C语言代码,是许多软件工程师追求的目标.本文就工作中的一些体会和经验做相关的阐述,不对的地方请各位指教. 第1招:以空间换时间 计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招--以空间换时间. 例如:字符串的赋值. 方法A,通常的办法: 代

笔记本散热的七个小技巧

  笔记本散热已经是一个老生常谈的话题了,进入了夏季,天气一天一天热了起来,笔记本该如何散热呢? 笔记本散热的七个小技巧之一 我们可以人为的垫高笔记本,为笔记本底部带来更好的空气流通,更快的带走热量.如果长时间使用笔记本,可以在笔记本下垫上铜板,钢板等一些利于散热的材料.当然,使用这些东西的时有一定要注意使本本放置平稳,不然会伤害硬盘. 笔记本散热的七个小技巧之二 办公室记得开冷气,电脑能承受的热度和人的感觉差不多,因此如果你在办公室觉得凉快,你的笔记型电脑也会感谢你. 笔记本散热的七个小技巧之

NetLogo编程的几个小技巧

NetLogo是一个用来对自然和社会现象进行仿真的可编程建模环境.NetLogo特别适合对随时间演化的复杂系统进行建模.建模人员能够向成百上千的独立运行的"主体"(agent)发出指令.这就使得探究微观层面上的个体行为与宏观模式之间的联系成为可能,这些宏观模式是由许多个体之间的交互涌现出来的.NetLogo足够简单,可以非常容易的进行仿真,或者创建自己的模型.并且它也足够先进,在许多领域都可以做为一个强大的研究工具. 更多了解请见http://ccl.northwestern.edu/