【问题标题】:Could a switch statement that switches resources be more generic?切换资源的 switch 语句可以更通用吗?
【发布时间】:2020-03-26 00:08:57
【问题描述】:

我正在开发一个带有选择语言按钮的信息亭应用程序。

之后的按钮有一个语言标志的图片和它的名字。现在我正在使用 switch 语句来设置图像,但我希望它更通用,因此在添加语言时我不必在任何地方更改代码。我从我的应用程序资源中获取图像,我想保持这种状态。

我能想到的唯一方法是从文件中检索图像并根据它们所使用的语言字符串命名它们。语言字符串的格式为“en-US”。此外,语言字符串在调用此函数之前在函数中声明。

private void SetLanguageButton()
        {
            switch (language)
            {
                case "en-US":
                    buttonLanguage.Image = Properties.Resources.en_US;
                    break;

                case "hu-HU":
                    buttonLanguage.Image = Properties.Resources.hu_HU;
                    break;

                case "sk-SK":
                    buttonLanguage.Image = Properties.Resources.sk_SK;
                    break;
            }
            buttonLanguage.Text = resourceManager.GetString("languageName", cultureInfo);
        }

【问题讨论】:

  • 我能想到的唯一方法你的“方法”听起来不错。那你在问什么?你是在问你的方法是不是好方法?还是您在问是否有其他更好的方法?
  • 我在问是否有一个通用的方法。这种方式非常糟糕,因为它是硬编码的。如果你的意思是我的文件方式,我想使用资源来做到这一点。

标签: c# switch-statement resources


【解决方案1】:

如果你有文化资源,你可以得到如下数据

buttonLanguage.Image = 
    (Icon)Properties.Resources.ResourceManager.GetObject("langicon", cultureInfo);
buttonLanguage.Text = 
    Properties.Resources.ResourceManager.GetString("langname", cultureInfo);

【讨论】:

  • 它说'不能将对象隐式转换为 System.Drawing.Image'
  • @PSONGDALI 这个= (Icon)ResourceManager.GetObject(....)...
  • 我用这个代码 buttonLanguage.Image = (Image)Properties.Resources.ResourceManager.GetObject(language.Replace("-", "_"),cultureInfo);
  • 好。享受。这是参考docs.microsoft.com/en-us/dotnet/api/…
  • @PSONGDALI 其实一开始我并不确定。我以为你在 1 个文件中有所有图标。然后可以使用命名约定。但是,如果每种文化都有一个资源文件 - 您可以使用发布的代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-31
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多