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)
{
this.WindowState = FormWindowState.Minimized;
return;
}
base.WndProc(ref m);
}
foreach 編譯後會產生 IEnumerator 與 try/finally 區塊,帶來額外開銷。對效能敏感的熱路徑,改用 for 迴圈直接索引存取 List<T> 或陣列可顯著提升速度。
using (var stream = new FileStream("Image.xml", FileMode.Create))
{
var formatter = new SoapFormatter();
Image img = Image.FromFile("Image.bmp");
formatter.Serialize(stream, img);
}
利用 SoapFormatter 將 Image 物件序列化為 XML 格式,便於設定檔儲存或傳輸。
private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.V)
e.Handled = true; // 標記為已處理,取消預設貼上行為
}
TextBox 無法攔截 Ctrl+V,改用 RichTextBox 並處理 KeyDown 即可。
bool fileExists = File.Exists(path);
bool dirExists = Directory.Exists(path);
位於 System.IO 命名空間,簡單直觀。
// 1. 定義委派型別
public delegate void MyEventHandler(object sender, long lineNumber);
// 2. 類別中宣告事件
public class DataImporter
{
public event MyEventHandler NewLineRead;
public void ImportData()
{
long line = 0;
while (/* 讀取資料 */)
{
line++;
NewLineRead?.Invoke(this, line); // 觸發事件
}
}
}
// 3. 用戶端訂閱
var importer = new DataImporter();
importer.NewLineRead += (s, n) => Console.WriteLine($"已讀取第 {n} 行");
importer.ImportData();
using System.Net;
string GetHostName(string ip) => Dns.GetHostEntry(ip).HostName;
string GetIpAddress(string host) => Dns.GetHostEntry(host).AddressList[0].ToString();
注意:.NET Core / .NET 5+ 建議改用 Dns.GetHostEntryAsync 非同步版本。