C++ cli C++;CLI使用具有表单元素属性的资源管理器

C++ cli C++;CLI使用具有表单元素属性的资源管理器,c++-cli,resx,resourcemanager,C++ Cli,Resx,Resourcemanager,我正在为项目中的所有字符串使用一个global.resx文件,以简化提供我们需要的所有翻译。因此,对于我的每个表单,我没有将Localizable设置为true,而是在构造函数中创建一个全局Resourcemanager,如下所示: GlobalObjects::rm1 = gcnew System::Resources::ResourceManager(L"Hycal_PC_Software.AppLocalization", Assembly::GetExecutingAssembly())

我正在为项目中的所有字符串使用一个global.resx文件,以简化提供我们需要的所有翻译。因此,对于我的每个表单,我没有将Localizable设置为true,而是在构造函数中创建一个全局Resourcemanager,如下所示:

GlobalObjects::rm1 = gcnew System::Resources::ResourceManager(L"Hycal_PC_Software.AppLocalization", Assembly::GetExecutingAssembly());
InitializeComponent();
this->fileToolStripMenuItem->Text = GlobalObjects::rm1->GetString(L"File");
然后我设置各种表单元素的文本值,如下所示:

GlobalObjects::rm1 = gcnew System::Resources::ResourceManager(L"Hycal_PC_Software.AppLocalization", Assembly::GetExecutingAssembly());
InitializeComponent();
this->fileToolStripMenuItem->Text = GlobalObjects::rm1->GetString(L"File");

运行应用程序时效果很好,但现在当我转到表单的设计视图时,我会看到可怕的错误页面,而不是我的表单,因为它不喜欢rm1->。事后看来,显然不会,但正确的处理方法是什么?我真的不希望每个表单都有单独的.resx文件,特别是因为它们还包含各种我不想本地化的内容。

也许您将此代码放置到表单设计器生成的部分。只需将它移到其他地方,比如Form_Load事件处理程序。这是一个很大的错误,每个本地化服务都知道如何处理Winforms本地化的标准实现方式。您需要支付额外费用,并导致自定义方案出现故障和bug。不要这样做。我确实已经将它添加到表单设计器生成的部分。因此,您认为我应该将字符串设置为正常(因此UI是为非运行时开发工作而设置的),然后在表单加载中覆盖它们作为首选解决方案。有道理,只是想知道是否有办法避免重复,但如果没有,也有道理。谢谢Hans,但由于我只设置字符串,我希望避免多个resx文件的复杂性,从我所看到的情况来看,使用单个文件似乎是一种常见的方法。