下午人!精簡框架 - 檢索國家和地區列表
我正試圖在我的Compact Framework(Mobile)應用程序上實現一個縣的列表。
我可以在CultureInfo.GetCultures(.. etc)的完整.Net框架中輕鬆完成此操作。但是,CF似乎缺少這個功能?
有沒有什麼方法可以返回我可以填充到ComboBox中的國家(如果可能的話)的列表?
操作系統有一個國家列表,所以一定有辦法做到這一點?
我期待回覆!
下午人!精簡框架 - 檢索國家和地區列表
我正試圖在我的Compact Framework(Mobile)應用程序上實現一個縣的列表。
我可以在CultureInfo.GetCultures(.. etc)的完整.Net框架中輕鬆完成此操作。但是,CF似乎缺少這個功能?
有沒有什麼方法可以返回我可以填充到ComboBox中的國家(如果可能的話)的列表?
操作系統有一個國家列表,所以一定有辦法做到這一點?
我期待回覆!
這個怎麼樣?
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Runtime.InteropServices;
namespace OpenNETCF.Globalization
{
public class CultureInfoHelper
{
private delegate int EnumLocalesHandler(string lpLocaleString);
private static EnumLocalesHandler m_localesDelegate;
private static List<CultureInfo> m_cultures;
private static int EnumLocalesProc(string locale)
{
try
{
m_cultures.Add(CultureInfo.GetCultureInfo(
int.Parse(locale, NumberStyles.HexNumber)));
}
catch
{
// failed for this locale - ignore and continue
}
return 1;
}
public static CultureInfo[] GetCultures()
{
if (m_localesDelegate == null)
{
m_cultures = new List<CultureInfo>();
m_localesDelegate = new EnumLocalesHandler(EnumLocalesProc);
IntPtr fnPtr = Marshal.GetFunctionPointerForDelegate(
m_localesDelegate);
int success = EnumSystemLocales(fnPtr, LCID_INSTALLED);
}
return m_cultures.ToArray();
}
private const int LCID_INSTALLED = 0x01;
private const int LCID_SUPPORTED = 0x02;
[DllImport("coredll", SetLastError = true)]
private static extern int EnumSystemLocales(
IntPtr lpLocaleEnumProc, uint dwFlags);
}
}
用法是這樣的:
using OpenNETCF.Globalization;
....
static void Main()
{
foreach (CultureInfo ci in CultureInfoHelper.GetCultures())
{
Debug.WriteLine(string.Format("0x{0:x2}({1}) : {2}", ci.LCID, ci.Name, ci.EnglishName));
}
}
和輸出是這樣的:
0x402(bg-BG) : Bulgarian (Bulgaria)
0x403(ca-ES) : Catalan (Catalan)
0x405(cs-CZ) : Czech (Czech Republic)
0x406(da-DK) : Danish (Denmark)
0x407(de-DE) : German (Germany)
0x408(el-GR) : Greek (Greece)
0x409(en-US) : English (United States)
...
0x400a(es-BO) : Spanish (Bolivia)
0x440a(es-SV) : Spanish (El Salvador)
0x480a(es-HN) : Spanish (Honduras)
0x4c0a(es-NI) : Spanish (Nicaragua)
0x500a(es-PR) : Spanish (Puerto Rico)
不幸的CultureInfo.GetCultures方法不受.NET Compact Framework支持,但您可以通過檢查CultureType Enumeration來遍歷設備上可用的文化。這裏的link指向MSDN的鏈接,帶有一些解釋和示例