谢谢,HI,请教一个问题,Winform程序,我用资源文件做多语言,现在我遇到一个问题,当子窗口已经打开时,这时切换语言,子窗口的语言不变,这怎么解决

Angelnet 2008-02-16 07:18:01
Thread.CurrentThread.CurrentCulture = new CultureInfo(iLanguage.EditValue.ToString());
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
if (iLanguage.EditValue.ToString().ToUpper() == "ZH-CN")
{
DevExpress.XtraBars.Localization.BarLocalizer.Active = new DxperienceXtraBarsLocalizationCHS();
DevExpress.XtraEditors.Controls.Localizer.Active = new DxperienceXtraEditorsLocalizationCHS();
DevExpress.XtraGrid.Localization.GridLocalizer.Active = new DxperienceXtraGridLocalizationCHS();
DevExpress.XtraNavBar.NavBarLocalizer.Active = new DxperienceXtraNavBarLocalizationCHS();
DevExpress.XtraPrinting.Localization.PreviewLocalizer.Active = new DxperienceXtraPrintingLocalizationCHS();
DevExpress.XtraScheduler.Localization.SchedulerLocalizer.Active = new DxperienceXtraSchedulerLocalizationCHS();
DevExpress.XtraReports.Localization.ReportLocalizer.Active = new DxperienceXtraReportsLocalizationCHS();
DevExpress.XtraLayout.Localization.LayoutLocalizer.Active = new DxperienceXtraLayoutLocalizationCHS();
DevExpress.XtraPivotGrid.Localization.PivotGridLocalizer.Active = new DevExpress.XtraPivotGrid.Localization.PivotGridLocalizer();
DevExpress.XtraTreeList.Localization.TreeListLocalizer.Active = new DevExpress.XtraTreeList.Localization.TreeListLocalizer();
DevExpress.XtraVerticalGrid.Localization.VGridLocalizer.Active = new DevExpress.XtraVerticalGrid.Localization.VGridLocalizer();

System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(this.GetType());
this.Text = resources.GetString("$this.Text");
Type typeForm = this.GetType();
System.Reflection.FieldInfo[] fieldInfos = typeForm.GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
foreach (System.Reflection.FieldInfo fieldInfo in fieldInfos)
{
object o = fieldInfo.GetValue(this);
if (o != null)
{
resources.ApplyResources(o, fieldInfo.Name);
}
}
}
else
{
DevExpress.XtraBars.Localization.BarLocalizer.Active = null;
DevExpress.XtraEditors.Controls.Localizer.Active = null;
DevExpress.XtraGrid.Localization.GridLocalizer.Active = null;
DevExpress.XtraNavBar.NavBarLocalizer.Active = null;
DevExpress.XtraPrinting.Localization.PreviewLocalizer.Active = null;
DevExpress.XtraScheduler.Localization.SchedulerLocalizer.Active = null;
DevExpress.XtraReports.Localization.ReportLocalizer.Active = null;
DevExpress.XtraLayout.Localization.LayoutLocalizer.Active = null;
DevExpress.XtraPivotGrid.Localization.PivotGridLocalizer.Active = null;
DevExpress.XtraTreeList.Localization.TreeListLocalizer.Active = null;
DevExpress.XtraVerticalGrid.Localization.VGridLocalizer.Active = null;

System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(this.GetType());
this.Text = resources.GetString("$this.Text");
Type typeForm = this.GetType();
System.Reflection.FieldInfo[] fieldInfos = typeForm.GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
foreach (System.Reflection.FieldInfo fieldInfo in fieldInfos)
{
object o = fieldInfo.GetValue(this);
if (o != null)
{
resources.ApplyResources(o, fieldInfo.Name);
}
}
}
...全文
212 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lextm 2008-02-17
  • 打赏
  • 举报
回复
使用资源文件的话,就是这个问题。因为所有的文字都是窗体初始化那会在InitializeComponents里面做的,要换只能重新建立一个实例。

使用其它方式或许可以做到。

为了可靠起见,我的程序一般都是提示用户重新启动程序之后才能切换语言。虽然即时切换很cool,但是太难做了,实际上用处也不是那么大。
hsgrass37301 2008-02-17
  • 打赏
  • 举报
回复
1.在子窗体定义一个读取文件的过程(翻译)
2.保存子窗体的实例引用, 在切换语言的时候 同时调用各子窗体的翻译过程,
我是这样做的, 因为只有两个窗体,呵呵

.NET有全局窗体的引用列表, 你可以强制转换一个, 这样就不用自己搞一个窗体实例列表...

应该还有更方便的方法:)

lalac 2008-02-16
  • 打赏
  • 举报
回复
因为多语言是保存在卫星资源文件里的,所以一旦窗体加载了某终于语言的资源,就不会变了,当改变语言后,要想界面刷新,只有重新加载子窗体才可以。
Angelnet 2008-02-16
  • 打赏
  • 举报
回复
HI,请教一个问题,Winform程序,我用资源文件做多语言,现在我遇到一个问题,当子窗口已经打开时,这时切换语言,子窗口的语言不变,改变语言后,再打开子窗口就是正常的,请问这怎么解决?谢谢

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧