用winform的MessageBox是實現不了的,這里我用的是DevExpress控件的XtraMessageBoxForm
例如如果想在一個提示框里修改“是”,“否”按鈕的文本時,這個時候我們一般都不好改,只能自己寫一個form了,但是我們可以派生一個XtraMessageBoxForm的form之后重寫方法就可以做到了
1 class MyCloseXtraMessageBoxForm : XtraMessageBoxForm 2 { 3 protected override string GetButtonText(DialogResult target) 4 { 5 switch (target) 6 { 7 case DialogResult.Yes: 8 return "保存"; 9 case DialogResult.No: 10 return "不保存"; 11 } 12 return base.GetButtonText(target); 13 } 14 }
然后調用的時候按下面的去調用就行了
1 XtraMessageBoxArgs msgBoxArgs = new XtraMessageBoxArgs(this, 2 "是否保存", 3 "提示", 4 new[] { DialogResult.Yes, DialogResult.No, DialogResult.Cancel }, 5 null, 6 0); 7 MyCloseXtraMessageBoxForm msgBoxForm = new MyCloseXtraMessageBoxForm(); 8 DialogResult dr = msgBoxForm.ShowMessageBoxDialog(msgBoxArgs); 9 switch (dr) 10 { 11 case DialogResult.Cancel: 12 break; 13 14 case DialogResult.Yes: 15 break; 16 17 case DialogResult.No: 18 break; 19 20 default: 21 throw new ArgumentOutOfRangeException(); 22 }
效果如下:

針對這里面cancel按鈕為什么不是“取消”的問題,我還沒找到原因,之前都是能顯示中文的,實在遇到這個問題,重寫cancel按鈕的文本就行了
對於按鈕都是英文,感覺每次改寫很麻煩,我們可以自己寫一個漢化類

通過下面代碼可使“OK”顯示為中文:
首先創建一個繼承自Localizer的類:
- using DevExpress.XtraEditors.Controls;
- public class MessboxClass : Localizer
- {
- public override string GetLocalizedString(DevExpress.XtraEditors.Controls.StringId id)
- {
- switch (id)
- {
- case StringId.XtraMessageBoxCancelButtonText:
- return "取消";
- case StringId.XtraMessageBoxOkButtonText:
- return "確定";
- case StringId.XtraMessageBoxYesButtonText:
- return "是";
- case StringId.XtraMessageBoxNoButtonText:
- return "否";
- default:
- return base.GetLocalizedString(id);
- }
- }
- }
這里要注意,要在工程引用中添加DevExpress.Data和DevExpress.XtraEditors。編寫上面的類之后在工程的Program.cs文件的main函數中添加:
DevExpress.XtraEditors.Controls.Localizer.Active = new MessboxClass(); 即可。
如果你的Programs的main函數中有創建窗體,那么最好將上述代碼寫在main函數內第一行,確保能夠執行到。顯示效果如圖:

我這里只改了確定、取消及是否,讀者朋友可根據需要修改其他。
