c#自定義消息框


一年多沒有寫過博客了,看着園子里強哥(路過秋天)每星期都有新博文,真是佩服!這幾天剛好有空,將三年多來做過的項目重新整理了一遍,去年看前年的項目代碼,覺得寫得很垃圾,今年看去年的代碼,又覺得垃圾,很多地方可以優化的很好,復用得很好,甚至還發現了一個核心項目居然有幾處明顯的BUG,哎,都已經賣出500多套了,目前也沒有客戶反映這個BUG。本人一直從事安防行業的編程,從VBVB.NET,從VCQT,從C#桌面開發到C#嵌入式開發,輾轉多門語言,這幾天靜下心來思考,將很多項目中經常用到的處理封裝起來,以備后用,特別是近期接了幾個私活,如果用已經封裝好的常用的處理來開發的話,估計速度會加快很多,效率也會提高不少,特意准備花幾個星期時間,將常用處理以及自定義控件集合到一個項目。

Windows自帶的消息框比較丑,特別是轉到WIN7下更加,項目中用到的消息框非常多,基本上有提示信息、錯誤信息、詢問信息這三種,從美觀角度,MessageBox.show()這個方法出來的消息框有點不盡人意,於是自己寫了一個,個人覺得舒服些。

說明:以下命名忽略了大小寫。

自定義信息框

 

系統信息框

 

自定義詢問框

 

系統詢問框

 

 

步驟1

新建窗體frmMessageBox,放置一個pictureboxpicICO)控件和一個labellabinfo)控件以及兩個panel控件,其中panel1里面放一個按鈕,命名為btnOk,文text屬性為確定(&O)dialogresult屬性設置為ok,這樣的話結束對話框之后會返回dialogresult.ok,這里為了能夠自適應消息長度而改變按鈕寬度和對話框寬度,特意要放置兩個panel,另外一個panel放置兩個按鈕,一個是,一個否。

 

這樣的話相信你已經知道這些控件的用處了吧,圖片框用來顯示對應圖片,信息框的話就是一個大勾,詢問框的話就是一個大問號,提前將資源添加到項目中,建議圖片文件命名最好info.png/error.png這樣的,到時候取資源的話好找,label用來顯示消息。

步驟2

定義枚舉類型,這里定義了三種,你也可以自己增加。

public enum MessageBoxStyle

    {

        info=0,

        question=1,

        error=2

    };

步驟3

重寫構造函數

public frmMessageBox(MessageBoxStyle messageBoxStyle,string msg)
        {
            InitializeComponent();

            if (messageBoxStyle == MessageBoxStyle.info)
            {
                picICO.Image = global::myAlarmSystem.Properties.Resources.info;
                this.Text = "提示";
                panel1.Visible = true;
                panel2.Visible = false;
            }
            else if (messageBoxStyle == MessageBoxStyle.question)
            {
                picICO.Image = global::myAlarmSystem.Properties.Resources.question;
                this.Text = "詢問";
                panel1.Visible = false;
                panel2.Visible = true;
            }
            else if (messageBoxStyle == MessageBoxStyle.error)
            {
                picICO.Image = global::myAlarmSystem.Properties.Resources.error;
                this.Text = "錯誤";
                panel1.Visible = true;
                panel2.Visible = false;
            }

            this.labInfo.Text = msg;

            SizeF size = TextRenderer.MeasureText(msg, new Font("宋體", 15, FontStyle.Regular));
            
            int TempWidth = (int)size.Width;
            if (TempWidth <= 249) { return; }

            this.Width = (int)size.Width + 130;
            this.panel1.Width = TempWidth-20;
            this.panel2.Width = TempWidth-20;
            btnYes.Width = TempWidth / 2 - 20;
            btnNo.Width = TempWidth / 2 - 20;
        }

 

這里長度做了限制,如果長度小於249,則窗體寬度和按鈕寬度都不變。

 代碼下載:http://files.cnblogs.com/feiyangqingyun/myAlarmSystem20130526.zip

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM