Settings.Designer 中的文化信息
CultureInfo in Settings.Designer
也许我做错了。但我需要什么。
我的应用程序中有 2 种文化
我想在设置中选择语言并添加下一个代码:
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
private static List<CultureInfo> nclacCultureInfos = new List<CultureInfo>()
{
CultureInfo.GetCultureInfo("ru-RU"),
CultureInfo.GetCultureInfo("en-US")
};
[global::System.Configuration.UserScopedSetting()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
[Category("Main Settings")]
[DisplayName("Default Language")]
public CultureInfo CurentLanguage
{
get
{
return ((CultureInfo)(this["CurentLanguage"]));
}
set
{
this["CurentLanguage"] = value;
}
}
}
我无法 link nclacCultureInfos 列表和设置 CurentLanguage。只需要在 propertygrid 的下拉列表中浏览 2 种文化,理想情况下它将是 CultureInfo.Name,如俄语、英语。但此时应用程序在系统中显示所有可能的文化。感谢您的帮助。
您需要有一个自定义的 UITypeEditor。
public class CultureInfoEditor : UITypeEditor
{
private static List<CultureInfo> nclacCultureInfos = new List<CultureInfo>()
{
CultureInfo.GetCultureInfo("ru-RU"),
CultureInfo.GetCultureInfo("en-US")
};
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.DropDown;
}
IWindowsFormsEditorService currentService;
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
currentService = (IWindowsFormsEditorService)
provider.GetService(typeof(IWindowsFormsEditorService));
ListBox cultures = new ListBox();
cultures.Items.Add(nclacCultureInfos[0].DisplayName);
cultures.Items.Add(nclacCultureInfos[1].DisplayName);
cultures.Text = ((CultureInfo)(context.Instance as Settings)["CurentLanguage"]).DisplayName;
cultures.Dock = DockStyle.Top;
cultures.MouseClick += cultures_MouseClick;
currentService.DropDownControl(cultures);
return nclacCultureInfos[cultures.SelectedIndex];
}
void cultures_MouseClick(object sender, MouseEventArgs e)
{
currentService.CloseDropDown();
}
}
并且应该为我们的属性指定这个编辑器:
[global::System.Configuration.UserScopedSetting()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
[Category("Main Settings")]
[DisplayName("Default Language")]
[Editor(typeof(CultureInfoEditor), typeof(UITypeEditor))] // THIS LINE HAS BEEN ADDED
public CultureInfo CurentLanguage
{
get
{
return ((CultureInfo)(this["CurentLanguage"]));
}
set
{
this["CurentLanguage"] = value;
}
}
希望对您有所帮助。
也许我做错了。但我需要什么。 我的应用程序中有 2 种文化 我想在设置中选择语言并添加下一个代码:
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
private static List<CultureInfo> nclacCultureInfos = new List<CultureInfo>()
{
CultureInfo.GetCultureInfo("ru-RU"),
CultureInfo.GetCultureInfo("en-US")
};
[global::System.Configuration.UserScopedSetting()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
[Category("Main Settings")]
[DisplayName("Default Language")]
public CultureInfo CurentLanguage
{
get
{
return ((CultureInfo)(this["CurentLanguage"]));
}
set
{
this["CurentLanguage"] = value;
}
}
}
我无法 link nclacCultureInfos 列表和设置 CurentLanguage。只需要在 propertygrid 的下拉列表中浏览 2 种文化,理想情况下它将是 CultureInfo.Name,如俄语、英语。但此时应用程序在系统中显示所有可能的文化。感谢您的帮助。
您需要有一个自定义的 UITypeEditor。
public class CultureInfoEditor : UITypeEditor
{
private static List<CultureInfo> nclacCultureInfos = new List<CultureInfo>()
{
CultureInfo.GetCultureInfo("ru-RU"),
CultureInfo.GetCultureInfo("en-US")
};
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.DropDown;
}
IWindowsFormsEditorService currentService;
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
currentService = (IWindowsFormsEditorService)
provider.GetService(typeof(IWindowsFormsEditorService));
ListBox cultures = new ListBox();
cultures.Items.Add(nclacCultureInfos[0].DisplayName);
cultures.Items.Add(nclacCultureInfos[1].DisplayName);
cultures.Text = ((CultureInfo)(context.Instance as Settings)["CurentLanguage"]).DisplayName;
cultures.Dock = DockStyle.Top;
cultures.MouseClick += cultures_MouseClick;
currentService.DropDownControl(cultures);
return nclacCultureInfos[cultures.SelectedIndex];
}
void cultures_MouseClick(object sender, MouseEventArgs e)
{
currentService.CloseDropDown();
}
}
并且应该为我们的属性指定这个编辑器:
[global::System.Configuration.UserScopedSetting()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
[Category("Main Settings")]
[DisplayName("Default Language")]
[Editor(typeof(CultureInfoEditor), typeof(UITypeEditor))] // THIS LINE HAS BEEN ADDED
public CultureInfo CurentLanguage
{
get
{
return ((CultureInfo)(this["CurentLanguage"]));
}
set
{
this["CurentLanguage"] = value;
}
}
希望对您有所帮助。