【问题标题】:Compact Framework - Retrieve a list of countries and regionsCompact Framework - 检索国家和地区列表
【发布时间】:2009-01-12 16:22:03
【问题描述】:

下午的人!

我正在尝试在我的 Compact Framework(移动)应用程序上实现县列表。

我可以使用 CultureInfo.GetCultures(..etc) 在完整的 .Net 框架中轻松完成此操作。不过,CF好像少了这个功能?

有什么方法可以返回可以填充到 ComboBox 中的国家(和地区)列表?

操作系统有一个国家列表,所以一定有办法吗?

期待您的回音!

【问题讨论】:

    标签: c# .net compact-framework cultureinfo


    【解决方案1】:

    这个怎么样?

    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)
    

    【讨论】:

      【解决方案2】:

      不幸的是,.NET Compact Framework 不支持 CultureInfo.GetCultures 方法,但您可以通过检查 CultureType Enumeration 来遍历设备上的可用区域性。这是link MSDN 的链接,其中包含一些解释和示例

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-07
        • 2018-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-07
        • 1970-01-01
        • 2011-04-28
        相关资源
        最近更新 更多