發表文章

目前顯示的是 4月, 2011的文章

Silverlight ComboBox的Hotkey功能

最近在做專案時,客戶問到操作界面的問題,希望ComboBox能夠有hotkey,這種需求是很難拒絕的,特別是很久以前的WinForm早就有這種功能了。 但不幸的是,Silverlight...沒有。沒有的原因是Silverlight的ComboBox比較強(嗯...好怪的邏輯唷),不過,是真的,因為Silverlight的ListBox和ComboBox裡面的item並不像是以前WinForm or WebForm只能是ListBoxItem, 現在Silverlight中的ComboBox的Item,可以是任何物件,例如簡單一點的String, 複雜一點的Calendar, 甚至可以讓每一個Item是多個物件的集合。 不過,這是ComboBox比較複雜且加上DataBinding的用法,那...假設ComboBox中的Items,根本就是很單純的ComboBoxItem或是String呢? 難道還是不能用HotKey嗎? 然而這時候,可能就需要寫段小程式了,去Hook ComboBox的KeyUp事件,在按下特定的字母時,將ComboBox的SelectIndex做動態的調整,要寫Code,不麻煩,但要能reuse就需要花點腦筋了。 不過令人興奮的是,Silverlight的Behavior技術,可以把這個功能封裝成可重複使用的原件,那,就設計成Behavoir好了... 不過正準備動手時,轉念一想,這麼常用的功能不可能沒有吧,Search了一下,果不其然,國外已經有寫好的套件囉,而且還含有Source Code呢...網址如下... http://gallery.expression.microsoft.com/RapidAccessKey Enjoy it... 分享

C# 101 - Cancel Event的設計

最近上課時,學員問到C#當中Event的設計,主要是希望能夠設計出類似WinForm視窗關閉時,那個帶有Cancel屬性的e參數,為此,該學員傷腦筋了很久。 為了避免學員內心受創,因此我緩緩地先述說了一段事件設計的歷史故事,成功轉移焦點後,再委婉告訴他其實不用設計,因為.NET從2.0開始就有了,直接繼承 CancelEventArgs 類別 即可。 程式碼如下: public class MyEventArgs : System.ComponentModel.CancelEventArgs { //你可以加上其他你需要的屬性 public string AnotherProperty { get; set; } } 而使用該參數時,只需要撰寫類似底下這樣的事件程式碼: public delegate void MyActionEventHandler(object sender, MyEventArgs e); public event MyActionEventHandler MyAction; 這樣設計出來的事件,在使用參數時就會具有e.Cancel屬性,而在我們觸發該事件的程式碼中,就可以透過底下這樣的Code, 來依照Cancel的值判斷是否要繼續後面的程式碼(這就是我們在WinForm的Closing事件中將屬性e.Cancel設為true之後,就不會關閉視窗的原因)... if (MyAction != null) { MyEventArgs arg = new MyEventArgs(); MyAction.Invoke(this, arg); if (arg.Cancel) { return; } ...其他程式碼... } 其實整個很簡單,但令人訝異的是,許多.NET Developer由於並不常寫Class,導致對.NET內建的許多類別異常的不熟悉。 已經很久沒有機會和學員討論到基礎的東西了,頗令我感慨的是,學員對MVC有興趣,對MVVM有好奇,但由於網路資訊的普及,已經不多Developer,還願意花時間把Programing 101的書籍翻開來好好閱讀了...網路上資訊確實很多,但由於都較為片段,不容易有系統的學習,容易使得開發人員的觀念2266。 可是,我很想

技術並非唯一的解決方案

投入資訊業到現在,已經數不清多少個年頭了,在這十幾二十年的歲月中,有幸在不同的時間擔任不同的角色,因此格外能夠體會技術人員的心情。 最近有機會到一些場合進行教育訓練,講授的是微軟新的雲端運算技術以及Silverlight開發技術,其中涉及n-tier概念以及物件導向程式設計,學員來自四面八方,很特別的背景,唯一的共同點就是都並非科班出身(詭異了,那資工資管畢業的人哪去了?),而技術歷史更是迥異,有ASP開發人員、有ASP.NET開發人員、Java開發人員、VB開發人員....etc... 原諒我這麼說,談到ORM、Class Design、Pattern等概念時,java背景的開發人員頻頻微笑點頭,顯然頗有認同之意,而大部分只寫過ASP.NET的WebForm開發人員似懂非懂,能夠抓到一個大概,但不太明白中間的道理和背後的原因,為何程式碼的需要延展性,如何提高重用性,為何要把這個機制設計成類別...似乎有些問號在腦袋裡... 其中有位ASP開發人員則在第一天中午就離開,跟我說,老師您講得很好,但是這些新技術我應該用不到,下回需要時再來請教您... 其實,這些路我都走過,我完全可以理解。(請相信我,這完全沒有對錯,上面這樣寫,跟開發人員的背景無關,其中也完全沒有任何的價值判斷) 我們這一票從Apple II/DOS時代開始寫程式的老人(不然,我要寫壯年嗎? XD) 我深深知道當年從ASP轉換到ASP.NET乃至於把程式改寫成n-tier架構的痛苦,但這麼多年下來,我也大約領略到了背後的甘甜,不過不同的是,我不再辯解,也不強調採用新架構開發系統的優點,每個人(每家公司)都有自己的路,即便不學新東西,也能找到自己的一條生路。 學習成本對每一個人來說是不同的,隨著年紀越長,我越來越少強調競爭力,畢竟電腦科技是應用科技,能產出結果、派上用場最重要,至於開發成本就見仁見智了。 在前一陣子受朋友之託,到一家非常大的企業,幫朋友看一個資訊系統。 主要是這樣,因為這個單位的資訊人員非常忙,這位朋友在部門中委託資訊單位建置了一個簡單的小系統,就是資料輸入和查詢,頂多加上一點分析,但系統建置完成之後,一開始可以用,不過久了之後想要做些調整,資訊單位卻遲遲無法配合,朋友明白這也並非IT人員的錯,因為工作量實在太大,救火都來不及了還改系統??? 我最近看到