用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函数内第一行,确保能够执行到。显示效果如图:
我这里只改了确定、取消及是否,读者朋友可根据需要修改其他。