本人一直從事安防行業(yè)的編程,從VB到VB.NET,從VC到QT,從C#桌面開(kāi)發(fā)到C#嵌入式開(kāi)發(fā),輾轉(zhuǎn)多門語(yǔ)言,這幾天靜下心來(lái)思考,將很多項(xiàng)目中經(jīng)常用到的處理封裝起來(lái),以備后用,特別是近期接了幾個(gè)私活,如果用已經(jīng)封裝好的常用的處理來(lái)開(kāi)發(fā)的話,估計(jì)速度會(huì)加快很多,效率也會(huì)提高不少,特意準(zhǔn)備花幾個(gè)星期時(shí)間,將常用處理以及自定義控件集合到一個(gè)項(xiàng)目。
Windows自帶的消息框比較丑,特別是轉(zhuǎn)到WIN7下更加,項(xiàng)目中用到的消息框非常多,基本上有提示信息、錯(cuò)誤信息、詢問(wèn)信息這三種,從美觀角度,MessageBox.show()這個(gè)方法出來(lái)的消息框有點(diǎn)不盡人意,于是自己寫了一個(gè),個(gè)人覺(jué)得舒服些。
說(shuō)明:以下命名忽略了大小寫。
自定義信息框
系統(tǒng)信息框
自定義詢問(wèn)框
系統(tǒng)詢問(wèn)框
步驟1:
新建窗體frmMessageBox,放置一個(gè)picturebox(picICO)控件和一個(gè)label(labinfo)控件以及兩個(gè)panel控件,其中panel1里面放一個(gè)按鈕,命名為btnOk,文text屬性為確定(&O),dialogresult屬性設(shè)置為ok,這樣的話結(jié)束對(duì)話框之后會(huì)返回dialogresult.ok,這里為了能夠自適應(yīng)消息長(zhǎng)度而改變按鈕寬度和對(duì)話框?qū)挾,特意要放置兩個(gè)panel,另外一個(gè)panel放置兩個(gè)按鈕,一個(gè)是,一個(gè)否。
這樣的話相信你已經(jīng)知道這些控件的用處了吧,圖片框用來(lái)顯示對(duì)應(yīng)圖片,信息框的話就是一個(gè)大勾,詢問(wèn)框的話就是一個(gè)大問(wèn)號(hào),提前將資源添加到項(xiàng)目中,建議圖片文件命名最好info.png/error.png這樣的,到時(shí)候取資源的話好找,label用來(lái)顯示消息。
步驟2:
定義枚舉類型,這里定義了三種,你也可以自己增加。
public enum MessageBoxStyle
{
info=0,
question=1,
error=2
};
步驟3:
重寫構(gòu)造函數(shù)
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 =
"詢問(wèn)"
;
panel1.Visible =
false
;
panel2.Visible =
true
;
}
else
if
(messageBoxStyle == MessageBoxStyle.error)
{
picICO.Image = global::myAlarmSystem.Properties.Resources.error;
this
.Text =
"錯(cuò)誤"
;
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;
}