註:本組件適用於.net2.0+的winform項目 樣子: 實際效果比這gif順滑,建議下載文末的Tester體驗 介紹: 如圖所見,這種提示在網頁、手機上用的較多,相比正經的消息框(如MessageBox),我認為好處有: 不需要用戶對消息本身做出響應,點啥【確定】什麼的 不阻塞、不幹預用戶的後 ...
註:本組件適用於.net2.0+的winform項目
樣子:
實際效果比這gif順滑,建議下載文末的Tester體驗
介紹:
如圖所見,這種提示在網頁、手機上用的較多,相比正經的消息框(如MessageBox),我認為好處有:
- 不需要用戶對消息本身做出響應,點啥【確定】什麼的
- 不阻塞、不幹預用戶的後續操作,就是單純告訴你一聲完事了
- 視覺上通過動畫效果保證消息的送達性,彌補因無干預可能造成的“被無視”
這就是我所謂的【輕快型消息提示窗】,適用於:
特點:
- 在滑鼠附近顯示消息。所以不適合耗時任務,因為等任務執行完,滑鼠都不知跑哪裡去了
- 內置3種消息性質的圖標,,亦可使用自定義圖標(使用Show方法)
- 上浮動畫效果可開閉(屬性AllowFloating,影響後續彈出的消息窗)
- 可以只顯示圖標或文本,甚至圖標文本全無也行~雖然這樣沒意思
用法:
//開閉上浮動畫。預設開啟 MessageTip.AllowFloating = true|false; //預設停留時長(毫秒)。當ShowXXX中指定負值delay時,使用該值,預設500 MessageTip.DefaultDelay = int; //文本(可為null或"",下同)、圖標(為null時不顯示圖標)、停留時長(可選,下同,負值則使用DefaultDelay) MessageTip.Show("阿斯蒂芬", image | null, [delay]); //文本,內置的綠勾圖標,停留時長 MessageTip.ShowOk("執行成功", [delay]); //文本,內置的黃色感嘆號圖標,停留時長 MessageTip.ShowWarning("執行成功", [delay]); //文本,內置的紅叉圖標,停留時長 MessageTip.ShowError("執行成功", [delay]);
背景:
這東西我很早就想寫了,因為很多時候正兒八經的彈出個MessageBox會影響心情,本來就是告知一聲的事情,非得要去點一下確定,煩人,但因為一直有各種破事,到今天才弄。一開始是用AnimateWindow這個win32 API實現(MSDN),但它沒有上浮的效果,所以乾脆自己實現,原理無非是步進修改窗體的透明度(Opacity)和位置(Location),只是採用了非同步的手段。非同步在兩個地方有使用,一是改變Location,目的是不讓它與透明度動畫打架;二是Show窗體時也是非同步,目的是從線程層面完全與主UI線程隔離,達到快速Show出多個消息的效果,如圖:
不然就只能等一個消息完全消失完才能顯示下一個,並且在主線程Show的話,有可能阻塞用戶的其它操作。
最後,懇請指出問題,或告知已有的更好方案,感謝!
工程已放網盤,裡面有個Tester供你體驗,就是第一幅圖那個。http://pan.baidu.com/s/1dEVjzMD
-文畢-