1. 程式人生 > >MsgBox-自定義訊息對話方塊控制元件(非重寫MessageBox)

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(string
text) 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。 然後在對話方塊類標頭檔案中,加入這