MsgBox-自定義訊息對話方塊控制元件(非重寫MessageBox)
本文主要介紹的是一個自己編寫的,類似MessageBox訊息對話方塊的自定義控制元件。這個控制元件不是重寫MessageBox類,完全是參照MessageBox的功能,並在此的基礎上砍掉了一部分功能,如IOwer;但是,因為有原始碼,我們自己完全可以定義這個訊息對話方塊顯示的文字,圖片,按鈕,尺寸等等。極大的方便了我們在特殊情況下,需要一些另類的訊息對話方塊。
首先,我們來看一下這個自定義控制元件的訪問介面:MsgBox.cs,這個類提供了一系列過載的靜態方法Show,並通過不同的引數個數和型別,控制訊息對話方塊外觀和內容,程式碼如下:
1 ///<summary> 2 /// 顯示包含文字,按鈕,圖示內的訊息對話方塊3 ///</summary> 4 public class MsgBox 5 { 6 // 引數為空時的預設值 7 private static string defaultCaption = string.Empty; 8 private static MsgBoxButtons defaultButtons = MsgBoxButtons.OK; 9 private static MsgBoxIcon defaultIcon = MsgBoxIcon.None; 10 ///<summary>11 /// 訊息對話的結果 12 ///</summary>13 internal static MsgBoxDialogResult result = MsgBoxDialogResult.None; 14 ///<summary>15 /// 顯示可包括文字,符號和按鈕的訊息框 16 ///</summary>17 ///<param name="text">文字</param>18 ///<returns>結果</returns>19 public static MsgBoxDialogResult Show(stringtext) 20 { 21 return Show(text, defaultCaption, defaultButtons, defaultIcon); 22 } 23 ///<summary>24 /// 顯示可包括文字,符號和按鈕的訊息框 25 ///</summary>26 ///<param name="text">文字</param>27 ///<param name="caption">標題</param>28 ///<returns>結果</returns>29 public static MsgBoxDialogResult Show(string text,string caption) 30 { 31 return Show(text, caption, defaultButtons, defaultIcon); 32 } 33 34 ///<summary>35 /// 顯示可包括文字,符號和按鈕的訊息框 36 ///</summary>37 ///<param name="text">文字</param>38 ///<param name="caption">標題</param>39 ///<param name="buttons">按鈕</param>40 ///<returns>結果</returns>41 public static MsgBoxDialogResult Show(string text, string caption, MsgBoxButtons buttons) 42 { 43 return Show(text, caption, buttons, defaultIcon); 44 } 45 ///<summary>46 /// 顯示可包括文字,符號和按鈕的訊息框 47 ///</summary>48 ///<param name="text">文字</param>49 ///<param name="caption">標題</param>50 ///<param name="buttons">按鈕</param>51 ///<param name="icon">圖示</param>52 ///<returns>結果</returns>53 public static MsgBoxDialogResult Show(string text, string caption, MsgBoxButtons buttons, MsgBoxIcon icon) 54 { 55 //初始化訊息框56 DialogForm dialogForm = new DialogForm(text, caption, buttons, icon); 57 //彈出訊息框58 dialogForm.ShowDialog(); 59 //返回結果60 return result; 61 } 62 }
然後,我們來看一下提供訊息對話方塊按鈕,圖片,結果等資訊常量的Enum:
1 // 摘要: 2 // 指定若干常數,用以定義 System.Windows.Forms.MessageBox 上將顯示按鈕的文字 3 [ComVisible(true)] 4 internal class MsgBoxButtonText 5 { 6 // 摘要: 7 // 訊息框包含“確定”按鈕的文字。 8 public const string OK = "確認"; 9 // 摘要: 10 // 訊息框包含“是”按鈕的文字。 11 public const string Yes = "是"; 12 // 摘要: 13 // 訊息框包含“否”按鈕的文字。 14 public const string No = "否"; 15 // 摘要: 16 // 訊息框包含“取消”按鈕的文字。 17 public const string Cancel = "取消"; 18 // 摘要: 19 // 訊息框包含“重試”按鈕的文字。 20 public const string Retry = "重試"; 21 // 摘要: 22 // 訊息框包含“忽略”按鈕的文字。 23 public const string Ignore = "忽略"; 24 // 摘要: 25 // 訊息框包含“終止”按鈕的文字。 26 public const string Abort = "終止"; 27 // 摘要: 28 // 訊息框包含“複製”按鈕的文字。 29 public const string Copy = "複製"; 30 } 31 32 // 摘要: 33 // 指定識別符號以指示對話方塊的返回值。 34 [ComVisible(true)] 35 public enum MsgBoxDialogResult 36 { 37 // 摘要: 38 // 從對話方塊返回了 Nothing。這表明有模式對話方塊繼續執行。 39 None = 0, 40 // 41 // 摘要: 42 // 對話方塊的返回值是 OK(通常從標籤為“確定”的按鈕傳送)。 43 OK = 1, 44 // 45 // 摘要: 46 // 對話方塊的返回值是 Cancel(通常從標籤為“取消”的按鈕傳送)。 47 Cancel = 2, 48 // 49 // 摘要: 50 // 對話方塊的返回值是 Abort(通常從標籤為“中止”的按鈕傳送)。 51 Abort = 3, 52 // 53 // 摘要: 54 // 對話方塊的返回值是 Retry(通常從標籤為“重試”的按鈕傳送)。 55 Retry = 4, 56 // 57 // 摘要: 58 // 對話方塊的返回值是 Ignore(通常從標籤為“忽略”的按鈕傳送)。 59 Ignore = 5, 60 // 61 // 摘要: 62 // 對話方塊的返回值是 Yes(通常從標籤為“是”的按鈕傳送)。 63 Yes = 6, 64 // 65 // 摘要: 66 // 對話方塊的返回值是 No(通常從標籤為“否”的按鈕傳送)。 67 No = 7, 68 } 69 70 71 // 摘要: 72 // 指定定義哪些資訊要顯示的常數。 73 [ComVisible(true)] 74 public enum MsgBoxIcon 75 { 76 ///<summary> 77 /// 無 78 ///</summary> 79 None = 0, 80 ///<summary> 81 /// 錯誤 82 ///</summary> 83 Error = 1, 84 ///<summary> 85 /// 問題 86 ///</summary> 87 Question = 2, 88 ///<summary> 89 /// 停止 90 ///</summary> 91 Stop = 3, 92 ///<summary> 93 /// 警告 94 ///</summary> 95 Warning = 4, 96 ///<summary> 97 /// 資訊提示 98 ///</summary> 99 Information = 5, 100 ///<summary>101 /// 崩潰 102 ///</summary>103 SysBreak = 6, 104 ///<summary>105 /// 空值 106 ///</summary>107 NoRecord = 7, 108 } 109 110 // 摘要: 111 // 指定若干常數,用以定義 System.Windows.Forms.MessageBox 上將顯示哪些按鈕112 [ComVisible(true)] 113 public enum MsgBoxButtons 114 { 115 116 // 摘要: 117 // 訊息框包含“確定”按鈕。118 OK = 0, 119 //120 // 摘要: 121 // 訊息框包含“確定”和“取消”按鈕。122 OKCancel = 1, 123 //124 // 摘要: 125 // 訊息框包含“中止”、“重試”和“忽略”按鈕。126 AbortRetryIgnore = 2, 127 //128 // 摘要: 129 // 訊息框包含“是”、“否”和“取消”按鈕。130 YesNoCancel = 3, 131 //132 // 摘要: 133 // 訊息框包含“是”和“否”按鈕。134 YesNo = 4, 135 //136 // 摘要: 137 // 訊息框包含“重試”和“取消”按鈕。138 RetryCancel = 5, 139 //140 // 摘要: 141 // 訊息框包含“確認”和“複製”按鈕。142 OKCopy = 6, 143 }
下面,我們來看最重要的一個部分,訊息對話方塊:DialogForm窗體:
在這個窗體中,我們定義各種控制元件,並給他們的屬性賦上有意義且正確的值,比如:要顯示訊息的內容,那麼就需要Lable或TextBox控制元件,並設定它們的Font,Localtion,Text,Name等屬性;要獲取選擇的結果,需要一個或數個按鈕控制元件;在特定條件下,某個控制元件的某個事件是否會觸發另外一個事件等等。設定好某一個新建的控制元件的所有屬性後,將其新增到一個容器中;所有控制元件都建立並新增到容器中後,再將窗體顯示出來,這就是我們看到的訊息對話方塊。下面的程式碼是建立按鈕的方法:
1 // <summary> 2 /// 設定按鈕 3 ///</summary> 4 ///<param name="button">需產生的按鈕組</param> 5 private void SetButton(MsgBoxButtons buttons) 6 { 7 int width = this.pnlButtonContainer.Width / 2; 8 int height = this.pnlButtonContainer.Height; 9 int x = 0, y = 0; 10 switch (buttons) 11 { 12 case MsgBoxButtons.OK: 13 { 14 15 x=width- 30; 16 y=height- 30; 17 //“確認”按鈕 18 Button btn1 = new Button(); 19 btn1.Size = new Size(75, 23); 20 btn1.Font = new Font("宋體", 9); 21 btn1.Location = new Point(x,y); 22 btn1.Name = "btnOK"; 23 btn1.Text = MsgBoxButtonText.OK; 24 btn1.Click += btnOK_Click; 25 pnlButtonContainer.Controls.Add(btn1); 26 27 } 28 break; 29 case MsgBoxButtons.OKCancel: 30 { 31 x=width- 80; 32 y=height- 30; 33 //“確認”按鈕 34 Button btn1 = new Button(); 35 btn1.Size = new Size(75, 23); 36 btn1.Font = new Font("宋體", 9); 37 btn1.Location = new Point(x, y); 38 btn1.Name = "btnOK"; 39 btn1.Text = MsgBoxButtonText.OK; 40 btn1.Click += btnOK_Click; 41 pnlButtonContainer.Controls.Add(btn1); 42 43 44 x=width+ 5; 45 y=height- 30; 46 //“取消”按鈕 47 Button btn2 = new Button(); 48 btn2.Size = new Size(75, 23); 49 btn2.Font = new Font("宋體", 9); 50 btn2.Location = new Point(x, y); 51 btn2.Name = "btnCancel"; 52 btn2.Text = MsgBoxButtonText.Cancel; 53 btn2.Click += btnCancel_Click; 54 pnlButtonContainer.Controls.Add(btn2); 55 56 } 57 break; 58 case MsgBoxButtons.YesNo: 59 { 60 x=width- 80; 61 y=height- 30; 62相關推薦
MsgBox-自定義訊息對話方塊控制元件(非重寫MessageBox)
本文主要介紹的是一個自己編寫的,類似MessageBox訊息對話方塊的自定義控制元件。這個控制元件不是重寫MessageBox類,完全是參照MessageBox的功能,並在此的基礎上砍掉了一部分功能,如IOwer;但是,因為有原始碼,我們自己完全可以定義這個訊息對話方塊顯
c# 自定義事件傳參(控制元件資料同步更新)
下面是傳值的視窗程式碼 public partial class Form1 : Form {//自定義一個事件 public event EventHandler SetMsg; public Form1() {
Android自定義View--翻書控制元件(一)
0.前言 最近重看了一遍封神演義,感覺QQ閱讀那個翻書的效果挺好的,準備做一個。上週五下午用了兩個小時只寫了一部分功能,以後有時間再完善 1.分析 先看效果圖 這個空間,說簡單也簡單,說難也難,簡單就在於這個效果主要就是依賴canvas的clippath才見到部分canvas,難就難在裁
Silverlight自定義資料繫結控制元件應該如何處理IEditableObject和IEditableCollectionView物件
原文: Silverlight自定義資料繫結控制元件應該如何處理IEditableObject和IEditableCollectionView物件 原創文章,如需轉載,請註明出處。 最近在一直研究Silverlight下的資料繫結控制元件,發現有這樣兩個介面IEditableObject
WPF TabIndex預設樣式修改:去掉預設虛線框、自定義樣式(Button控制元件為例)
去掉Tab選中預設虛線框 Tab鍵切換時,被選控制元件自動存在虛線框,有時候為了介面美觀,這個虛線框就顯得比較麻煩。廢話不多說,下面是方法。 <Window.Resources> <Style x:Key="MeyFocusVisual" TargetType="{
Ext 6.5.3 classic版本,自定義實現togglefield開關控制元件
1,在Ext 6.5.3的classic版中沒有提供開關控制元件,參照modern版中 togglefield開關的實現,繼承滑動器(sliderfield),自定義一個開關按鈕。支援value繫結和點選切換狀態以及表單提交。 2,完成後效果如圖: 3, js程式碼如下:
C#GDI+自定義繪製曲線圖表控制元件DataChart 簡單實現 C#GDI+ 繪製線段(實線或虛線)、矩形、字串、圓、橢圓
C#GDI+自定義繪製曲線圖表控制元件DataChart 這裡只說明在計算刻度和曲線繪製的時候 只提供思路,只是做了下簡單的計算,不喜勿噴 還望見諒,高手直接飄過吧。這個要做好,還是需要研究研究演算法的,比如刻度隨著控制元件的大小發生改變的時候計算不同的值,根據刻度範圍來計算刻度以及刻度值等,這裡沒有研究,
PyQt5-對話方塊控制元件使用(QInputDialog,QFontDialog)
QInputDialog 控制元件是一個標準對話方塊,由一個輸入文字框和兩個按鈕組成; 常用方法如下: QFontDialog控制元件是一個常用的字型選擇對話方塊,可以讓使用者選擇字型樣式; QFontDialog是QDialog標準對話方塊的一部分; QFontDialog中靜態方
PyQt5-對話方塊控制元件使用(QFileDialog)
QFileDialog是用於開啟和儲存檔案的標準對話方塊。 QFileDialog類繼承QDialog類; QFileDialog在開啟檔案時使用了文字過濾器,用於顯示指定副檔名的檔案。也可以設定使用QFileDialog開啟檔案時的起始目錄和指定副檔名的檔案。 常用方法: 例如:
自定義View——聚焦動畫控制元件
我儘量不打錯別字,用詞準確,不造成閱讀障礙。 這個自定義View是很簡單的一個,效果是在拍攝圖片時的對焦動畫,在自定義SurfaceView中使用這個控制元件就好了。 效果如下: 程式碼: public class FocusView extends Vi
Qt自定義按鈕彈窗控制元件
一直以為做一個按鈕彈窗控制元件很簡單,可做起來發現並不是那麼順利,折騰了挺長時間的,先看下效果: 前言 嘗試過兩種方案,方案一:使用QToolButton控制元件,我們可以自定義一個widget,然後setMenu設定為該widget;方案二:點選一個
自定義餅狀圖控制元件PieView
本篇參考:GcsSloop的安卓自定義View進階-Canvas之繪製圖形 一、分析如上餅狀圖,所需要得資訊如下 各塊的顏色 所有塊量得總和 各個塊得量佔總量的百分比,並通過百分比得到各個塊所佔扇形的弧度 第一個塊得起始角
自定義Tablayout——ViewPager導航控制元件_SimpleViewpagerIndicator
寫這個小控制元件是因為最近負責維護的一款app大改版,設計師給了一個新的ViewPager導航樣式,但找了幾個常用的導航控制元件發現都無法100%實現設計師給的效果,於是就乾脆自己動手豐衣足食了。 控制元件只有一個單獨的java類,程式碼也很簡單,放出來希望能幫到需要的人。
自定義下拉重新整理控制元件-仿美團重新整理效果
概述 下拉重新整理是平時專案中最常用的功能,今天要說的就是如何自定義下拉重新整理控制元件。 第三方重新整理控制元件也比較多,例如Android-PullToRefresh,XListView等,但是這些控制元件自定義重新整理頭部不那麼容易擴充套件,它
總結VC6對話方塊控制元件訪問的七種方式
一、GetDlgItem()->Get(Set)WindowText(ch3); 二、GetWindowText()/SetDlgItemText(); 三、GetDlgItemInt()/SetDlgItemInt(); 四、將控制元件和整形變數相關聯; 五、將控制元件和控制元件變數相關聯; 六、S
WPF TabIndex預設樣式修改:去掉預設虛線框、自定義樣式(Button控制元件為例)
去掉Tab選中預設虛線框 Tab鍵切換時,被選控制元件自動存在虛線框,有時候為了介面美觀,這個虛線框就顯得比較麻煩。廢話不多說,下面是方法。 <Window.Resources> <Style x:Key="MeyFocusVisual" Tar
自定義.NET Calarder日曆控制元件(實現部落格園日曆)
這幾天看了下.net 日曆控制元件,去Google了下出來很多,大家都知道.netframework版本中自帶的日曆控制元件只有日期沒有備註的,比如我在1月1日下面要顯示出‘元旦節’這三個字,那要怎麼做呢? 下面先熟悉下Calarder控制元件的常用屬性: Selectio
android 自定義鍵盤輸入密碼控制元件
直接上程式碼 public class PwdInputView extends RelativeLayout { private Context mContext; private GridView
Android自定義多TAB懸浮控制元件實現蘑菇街首頁效果
說明: 1.viewpager不能左右滑動; 2.轉載時程式碼略有改動(注:修復tab控制元件不能自動滑動的問題); 3.原始碼下載後不能直接執行,經過調整此問題已經修復。 核心程式碼: package com.Imy.Fuli.Fra
MFC 主對話方塊獲得tab control子對話方塊控制元件的值
1.建立兩個對話方塊程式,用來當做Tab Control控制元件的兩個頁。別忘了把Style改為Child,Border改為None。然後就可以在上面加其他控制元件了。 接著分別為這兩個對話方塊建立兩個類,比如CPage1和CPage2。 然後在對話方塊類標頭檔案中,加入這