.Net 集合型別的效率探討

我要在這裡說明的所謂「集合型別」指的並不是泛指 System.Collections 命名空間下的各種型別, 而是特別指自從 .Net 3.5 之後才出現的 Sets (集合) 型別, 特別是 System.Collections.Generic.HashSet 與 System.Collections.Generic.SortedSet 這兩個實作 ISet 介面的類別。ISet 介面是專門針對集合作業而設計的, 它提供了幾個特別的方法...

...繼續閱讀 »

Johnny's ButtonGen - 專供網頁設計人員使用的按鈕設計小工具

這個小工具是我使用 C#, Winform 在 Visual Studio 2010 上面開發的, 其主要目的原本是寫來專供自己使用, 但是一不小心把它做得似乎完整了一點, 覺得應該也可以拿來貢獻給其他人來用用, 所以就繼續稍為給它加了一點工, 順手連多國語言也做好了 (雖然目前只有繁體中文和英文而已, 但是框架是 OK 的, 可以擴充)...

...繼續閱讀 »

[入門] .Net 非同步處理與同步機制全解析 (一)

不管你學的是何種程式語言, 非同步及平行處理總是最令人費解的部份之一。如果你沒有過人的邏輯觀念, 那麼要把非同步程式寫好, 恐怕有一定的困難度。不過最難的部份不在技術上, 而是到底在何種場合下可以採用非同步或平行處理。在日常生活中, 我們採用的邏輯大多是循序進行的, 也就是說, 等到前一件事情完成之後, 才去進行下一件。但是在某些情況下, 非同步處理是比較合乎情理的做法...

...繼續閱讀 »

[入門] HTML 表格全解析 2/2

大部份剛入門的網頁設計師, 對於 HTML 表格的認識可能僅止於 <table>、<tr > 和 <td> 而已。稍為進階一點的, 可能知道像 colspan 和 rowspan 等等屬性。但是最近我很驚訝的發現有幾位已經從事網頁設計師蠻長一段時間的人, 其實並不知道(或不記得)有其它表格元素或屬性的存在...

...繼續閱讀 »

[入門] HTML 表格全解析 1/2

在網頁設計的領域中, 我覺得 HTML 表格大概是最受人誤用/誤解的網頁技術了。一方面, 我們時常可以看到在某些網頁上有數都數不盡的、層層套疊的 元素, 另一方面, 也時常聽到有人極力主張禁用 table 元素。這到底是怎麼一回事呢? ...

...繼續閱讀 »

程式內的防呆之道

在品管圈裡有一個很著名的水泥救生衣的笑話, 大意是說, 一個公司即使通過 ISO 或 CMMI 等認證, 也不能保證它不會做出水泥救生衣這種產品出來。非品管圈的人可能無法在一開始就看懂這個笑話; 但是請你再仔細想想看, 救生衣可以是水泥做的嗎? 如果真有這種東西的話, 也是黑幫拿來謀財害命用的, 不是拿來救人的。ISO 或 CMMI 的主要目的, 在於檢驗設計或生產的流程是否完善而且嚴格的被遵循, 它們卻沒有辦法保證設計或生產的東西是不是合理或賣不賣得出去...

...繼續閱讀 »

[Winform] 觀察者樣式之應用

Design Pattern 通常都是由許多人推薦的軟體架構模式, 而且有其固定的規則可循。我們可以把一些素有口碑的設計樣式拿來套用在某種情境之下, 但是我十分反對為套用 Design Pattern 而套用 Design Pattern。應該是反過來, 我們最好事先評估自己的情境適合應用何種 Design Pattern, 再來決定是否套用某種 Design Pattern, 不然就會流於削足適履...

...繼續閱讀 »

[Regex] 值得注意的 Regular Expression 樣式的潛在風險

Regex 本身已經十分複雜, 但不知道大家有沒有想過, 它的解析引擎和處理機制又是如何實作的呢? 一般來講, Regular Expression 的解析引擎可以分為三種, 一種叫做 DFA (Deterministic Finite Automation, 決定性有限自動機制), 另一種叫做 NFA (Nondeterministic Finite Automation, 非決定性有限自動機制), 還有一種叫做 POSIX NFA。.Net 採用了傳統的 NFA 引擎, 使得它既能兼顧速度與功能, 但缺點就是由於傳統 NFA 只接受它找到的第一個相符比對,它也可能讓其它比對無法被找到 (POSIX NFA 雖然可以找到, 但速度緩慢)...

...繼續閱讀 »

[Visual Studio] 清理開發環境遺留的檔案

當我們使用 VS 開發系統時, 開發工具需要保留一些空間以供運作; 就像俗語所說,「吃燒餅沒有不掉芝麻的」。但是如果在某些情況下, 使你懷疑 VS 或 .Net 是否遺留了太多不需要的檔案, 佔據了寶貴的硬碟空間, 那麼你應該如何找到這些暫存的、無用的檔案, 並且把它們清除, 而不會影響到原系統的運作呢...

...繼續閱讀 »

[Winform] 在 Windows Form 中讓背景流動的方法

首先我必須聲明一下, 以下我要介紹的方法雖然並不是百無一用, 而且看起來還算酷炫, 但是我必須承認這可以算是「無用技術」的一項。因為讓背景圖片不斷流動除了無端耗費 CPU 資源之外, 如果設定得不好, 還會讓你的使用者眼花瞭亂, 甚至可能會產生暈車的症狀, 所以小朋友不要亂學, 叔叔有練過才敢這樣做...

...繼續閱讀 »

使用 new FontFamily 時因字型不存在或非 TrueType 而造成 Exception 的問題

當我們要使用某種字型, 必須採用以下的方式進行: new Font(new FontFamily(fontName), 14f, FontStyle.Regular); 上面 fontName 是指輸入的字型, 例如 Arial。但是當你把程式部署到客戶端之後, 會有一個你可能想像不到的問題, 那就是, 如果對方機器上並未安裝此字型, 這時會產生一個 runtime 的 Argument Exception...

...繼續閱讀 »

[Winform] 動態產生下拉式表單的做法、問題與解決

在 Windows Form 中要以動態方式新增/移除選單項目是一件很容易的工作。簡單的講, 我們先在視窗上方加入一個 ToolStripMenuItem (在功能表與工具列中找到 ToolStrip 控制項, 再拉進視窗裡面), 接著, 加入一個 ToolStripMenuItem (假設將該項目命名為 "menuFile"), 然後我們就可以在程式中對它進行操作了...

...繼續閱讀 »

[Winform] 了解並修正 AddString 路徑與原矩形偏移的問題

在 GDI+ 功能中, 如果要在圖片中加上文字, 最簡單的方法就是使用 Graphics.DrawString() 方法。但是 DrawString() 方法固然簡單好用, 它的功能卻十分的不強; 光是想要描出文字的框線, 我們就得採用迂迴的方法才能辦得到, 效果還不見得好。上網查了很久之後, 發現絕大多數同好都建議改用 GraphicsPath.AddString()...

...繼續閱讀 »

[Winform] 復原滑鼠事件造成的非預期慣性滾動問題

這是一個困擾了我一整天的問題。從昨天晚上發現問題開始, 一直到今天下班前才解決, 足足花了十幾個小時在跟這個應該不是問題的問題奮戰著。我並沒有上網尋求答案, 因為我一直以為是自己程式出錯而反覆修改, 但最後卻發現並不是自己的程式有問題, 而可能是 Windows 本身的問題, 亦或是自己對 Windows Application 中滑鼠事件生命週期理解有誤而造成的...

...繼續閱讀 »

[入門] .NET 自訂型別

我可以理解為什麼我老婆開了十年的同樣一部車, 都不知道原來在 N 檔和 D 檔之間切換可以不必去按那個安全鈕; 但是我卻無法理解為什麼有一個已經寫了好幾年 .NET 程式的人, 在這輩子中竟然沒有寫過任何一個自訂型別...

...繼續閱讀 »