--------------201507160917更新---------------
--------------201507091034更新---------------
首先感謝猿友E204在回復中的反饋。
--------------201507082014原文(已更新)---------------
適用于:.net 2.0+的Winform項目
有損錄制+制圖的原因不可能原樣展示出真實效果,可至文章結尾下載Demo體驗。
總體來說,此消息框比較適合用在需要反饋大量消息文本的場合,用標準消息框的話,文本太多可能會使消息框超出屏幕大小,比如codeproject.com上這位老兄舉的例子,由于標準消息框不具備改變窗體大小的能力,將導致部分消息無法讓用戶看到。而就算沒有超出屏幕,一下子讓用戶面對那么多消息文字,體驗也不地道。使用本消息框就可以解決此類問題,比如可以將扼要信息顯示在主消息區,將大量的明細消息(例如批量處理中的單項處理情況)、次要消息、異常信息等放置在詳細信息區,由用戶或IT支持人員自己去展開獲取這些信息。同時,在沒有附加消息的時候,你仍然可以像標準消息框一樣使用它,所以,如果你跟我一樣不會用到標準消息框的IWin32Window、MessageBoxOptions和Help相關參數的話,基本上你可以在整個項目中全程用此消息框替換掉標準消息框,別忘了相比標準消息框,它還具備了可縮放、相對父窗體居中等額外能力??傃灾?,你值得擁有。至于如果你擔心性能問題,這個~我想這么說,我對自己的代碼質量還是有點信心的。也希望能得大俠指出槽點,感激!
先看公開成員:
//靜態屬性MessageBoxEx.EnableAnimateMessageBoxEx.EnableSound//靜態方法MessageBoxEx.Show(string, string, string)MessageBoxEx.Show(string, string, string, MessageBoxButtons)MessageBoxEx.Show(string, string, string, MessageBoxButtons, MessageBoxIcon)MessageBoxEx.Show(string, string, string, MessageBoxButtons, MessageBoxIcon, MessageBoxDefaultButton)MessageBoxEx.Show(string, string, Exception)MessageBoxEx.Show(string, string, Exception, MessageBoxButtons)MessageBoxEx.Show(string, string, Exception, MessageBoxButtons, MessageBoxIcon)MessageBoxEx.Show(string, string, Exception, MessageBoxButtons, MessageBoxIcon, MessageBoxDefaultButton)
MessageBoxEx.Show("主消息", "標題", "附加消息", MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);MessageBoxEx.Show("主消息", "標題", ex, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
MessageBoxEx.Show("阿斯頓發");MessageBoxEx.Show("阿斯頓發", "士大夫");
代碼不少,原因自然是有的,有興趣的童鞋請看后面的實現說明。另外,千萬不要認為代碼量跟性能有直接關系,有時候更多的代碼恰恰是為了提升性能而存在,有時候則是為了健壯性。
using System;using System.ComponentModel;using System.Drawing;using System.IO;using System.Runtime.InteropServices;using System.Threading;using System.Windows.Forms;namespace AhDung.WinForm{ /// <summary> /// 可以攜帶詳細信息的消息框 /// </summary> public static class MessageBoxEx { //異常消息文本 private const string InvalidButtonExString = "按鈕參數不是有效的枚舉項!"; private const string InvalidIconExString = "圖標參數不是有效的枚舉項!"; private const string InvalidDfButtonExString = "默認按鈕參數不是有效的枚舉項!"; /// <summary> /// 是否啟用動畫效果 /// </summary> public static bool EnableAnimate { get; set; } /// <summary> /// 是否啟用聲音反饋 /// </summary> public static bool EnableSound { get; set; } //靜態構造 static MessageBoxEx() { //默認啟用動畫+聲音 EnableAnimate = true; EnableSound = true; } #region 公開方法 /// <summary> /// 顯示消息框 /// </summary> /// <param name="message">消息文本</param> /// <param name="caption">消息框標題</param> /// <param name="attachMessage">附加消息</param> public static DialogResult Show(string message, string caption = null, string attachMessage = null) { return ShowCore(message, caption, attachMessage, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1); } /*下面這仨弄成重載而不是可選方法是為了避免不必要的參數檢查*/ /// <summary> /// 顯示消息框 /// </summary> /// <param name="message">消息文本</param> /// <param name="caption">消息框標題</param> /// <param name="attachMessage">附加消息</param> /// <param name="buttons">按鈕組合</param> public static DialogResult Show(string message, string caption, string attachMessage, MessageBoxButtons buttons) { if (!Enum.IsDefined(typeof(MessageBoxButtons), buttons)) { throw new InvalidEnumArgumentException(InvalidButtonExString); } return ShowCore(message, caption, attachMessage, buttons, MessageBoxIcon.None, MessageBoxDefaultButton.Button1); } /// <summary> /// 顯示消息框 /// </summary> /// <param name="message">消息文本</param> /// <param name="caption">消息框標題</param> /// <param name="attachMessage">附加消息</param> /// <param name="buttons">按鈕組合</param> /// <param name="icon">圖標</param> public static DialogResult Show(string message, string caption, string attachMessage, MessageBoxButtons buttons, MessageBoxIcon icon) { if (!Enum.IsDefined(typeof(MessageBoxButtons), buttons)) { throw new InvalidEnumArgumentException(InvalidButtonExString); } if (!Enum.IsDefined(typeof(MessageBoxIcon), icon)) { throw new InvalidEnumArgumentException(InvalidIconExString); } return ShowCore(message, caption, attachMessage, buttons, icon, MessageBoxDefaultButton.Button1); } /// <summary> /// 顯示消息框 /// </summary> /// <param name="message">消息文本</param> /// <param name="caption">消息框標題</param> /// <param name="attachMessage">附加消息</param> /// <param name="buttons">按鈕組合</param> /// <param name="icon">圖標</param> /// <param name="defaultButton">默認按鈕</param> public static DialogResult Show(string message, string caption, string attachMessage, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton) { if (!Enum.IsDefined(typeof(MessageBoxButtons), buttons)) { throw new InvalidEnumArgumentException(InvalidButtonExString); } if (!Enum.IsDefined(typeof(MessageBoxIcon), icon)) { throw new InvalidEnumArgumentException(InvalidIconExString); } if (!Enum.IsDefined(typeof(MessageBoxDefaultButton), defaultButton)) { throw new InvalidEnumArgumentException(InvalidDfButtonExString); } return ShowCore(message, caption, attachMessage, buttons, icon, defaultButton); } /********傳入異常的重載********/ /// <summary> /// 顯示消息框
新聞熱點
疑難解答