c#winform程序,修改MessageBox提示框中按钮的文本

用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的类: 

 

  1. using DevExpress.XtraEditors.Controls;  
  2. public class MessboxClass : Localizer  
  3.     {  
  4.         public override string GetLocalizedString(DevExpress.XtraEditors.Controls.StringId id)  
  5.         {  
  6.             switch (id)  
  7.             {  
  8.                 case StringId.XtraMessageBoxCancelButtonText:  
  9.                     return "取消";  
  10.                 case StringId.XtraMessageBoxOkButtonText:  
  11.                     return "确定";  
  12.                 case StringId.XtraMessageBoxYesButtonText:  
  13.                     return "是";  
  14.                 case StringId.XtraMessageBoxNoButtonText:  
  15.                     return "否";  
  16.                 default:  
  17.                     return base.GetLocalizedString(id);  
  18.             }  
  19.         }  
  20.     }  


这里要注意,要在工程引用中添加DevExpress.Data和DevExpress.XtraEditors。编写上面的类之后在工程的Program.cs文件的main函数中添加:

  DevExpress.XtraEditors.Controls.Localizer.Active = new MessboxClass();  即可。

  如果你的Programs的main函数中有创建窗体,那么最好将上述代码写在main函数内第一行,确保能够执行到。显示效果如图:

我这里只改了确定、取消及是否,读者朋友可根据需要修改其他。

 

posted @ 2016-12-16 14:05  marblemm  阅读(13651)  评论(0编辑  收藏  举报