七个C#编程的小技巧
一 最小化窗口
点击 X 或 Alt+F 时 最小化窗口 如 protected override void WndProc(ref Message m) { const int WM_SYSMAND = x ; const int SC_CLOSE = xF ; if (m Msg == WM_SYSMAND && (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 Class { static void Main(string[] args) { // create an ArrayList of strings ArrayList array = new ArrayList(); array Add( Marty ); array Add( Bill ); array Add( Gee ); // 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 richTextBox _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) 定义和使用自定义事件的步骤如下 ( )在Class之外定义一个delegate类型 用于确定事件程序的接口 ( )在Class内部 声明一个public event变量 类型为上一步骤定义的delegate类型 ( )在某个Method或者Property内部某处 触发事件 ( )Client程序中使用+=操作符指定事件处理程序
例子 // 定义Delegate类型 约束事件程序的参数 public delegate void MyEventHandler(object sender long lineNumber) ; public class DataImports { // 定义新事件NewLineRead public event MyEventHandler NewLineRead ; public void ImportData() { long i = ; // 事件参数 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) { // }
lishixinzhi/Article/program/net/201311/15559