熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

七個C#編程的小技巧

2022-06-13   來源: .NET編程 

  最小化窗口

  點擊XAlt+F最小化窗口

  如

  protected override void WndProc(ref Message m)
  {
   const int WM_SYSCOMMAND = x;
   const int SC_CLOSE = xF;
   if (mMsg == WM_SYSCOMMAND && (int) mWParam == SC_CLOSE)
   {
    // User clicked close button
    thisWindowState = FormWindowStateMinimized;
    return;
   }
   baseWndProc(ref m);
  }

  二如何讓Foreach 循環運行的更快

  foreach是一個對集合中的元素進行簡單的枚舉及處理的現成語句用法如下例所示

  using System;
  using SystemCollections;
  namespace LoopTest
  {
   class Class
   {
    static void Main(string[] args)
    {
     // create an ArrayList of strings
     ArrayList array = new ArrayList();
     arrayAdd(Marty);
     arrayAdd(Bill);
     arrayAdd(George);
     // print the value of every item
     foreach (string item in array)
     {
      ConsoleWriteLine(item);
     }
    }
   }
  }

  你可以將foreach語句用在每個實現了Ienumerable接口的集合裡如果想了解更多foreach的用法你可以查看NET Framework SDK文檔中的C# Language Specification

  在編譯的時候C#編輯器會對每一個foreach 區域進行轉換

  IEnumerator enumerator = arrayGetEnumerator();
  try 
  {
   string item;
   while (enumeratorMoveNext()) 
   {
    item = (string) enumeratorCurrent;
    ConsoleWriteLine(item);
   }
  }
  finally 
  {
   IDisposable d = enumerator as IDisposable;
   if (d != null) dDispose();
  }

  這說明在後台foreach的管理會給你的程序帶來一些增加系統開銷的額外代碼

  將圖片保存到一個XML文件

  WinForm的資源文件中將PictureBox的Image屬性等非文字內容都轉變成文本保存這是通過序列化(Serialization)實現的

  例子

  using SystemRuntimeSerializationFormattersSoap;
  Stream stream = new FileStream(E:\\ImagexmlFileModeCreateFileAccessWriteFileShareNone);
  SoapFormatter f = new SoapFormatter();
  Image img = ImageFromFile(E:\\Imagebmp);
  fSerialize(streamimg);
  streamClose();

  四屏蔽CTRLV

  在WinForm中的TextBox控件沒有辦法屏蔽CTRLV的剪貼板粘貼動作如果需要一個輸入框但是不希望用戶粘貼剪貼板的內容可以改用RichTextBox控件並且在KeyDown中屏蔽掉CTRLV鍵例子 

  private void richTextBox_KeyDown(object sender SystemWindowsFormsKeyEventArgs e)
  {
   if(eControl && eKeyCode==KeysV)
   eHandled = true;
  }

  判斷文件或文件夾是否存在

  使用SystemIOFile要檢查一個文件是否存在非常簡單 

  bool exist = SystemIOFileExists(fileName);

  如果需要判斷目錄(文件夾)是否存在可以使用SystemIODirectory

  bool exist = SystemIODirectoryExists(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;
   // 指定事件處理程序
   _daNewLineRead += new MyEventHandler(thisDA_EnterNewLine) ;
   // 調用Class方法途中會觸發事件
   _daImportData();
  }
  // 事件處理程序
  private void DA_EnterNewLine(object sender long lineNumber)
  {
   //
  }

  IP與主機名解析 

  使用SystemNet可以實現與Ping命令行類似的IP解析功能例如將主機名解析為IP或者反過來

  private string GetHostNameByIP(string ipAddress)
  {
   IPHostEntry hostInfo = DnsGetHostByAddress(ipAddress);
   return hostInfoHostName;
  }
  private string GetIPByHostName(string hostName)
  {
   SystemNetIPHostEntry hostInfo = DnsGetHostByName(hostName);
   return hostInfoAddressList[]ToString();
  } 


From:http://tw.wingwit.com/Article/program/net/201311/15559.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.