Click here to Skip to main content
Licence CPOL
First Posted 9 Aug 2007
Views 131,846
Downloads 1,106
Bookmarked 226 times

Localizing .NET Enums

By | 17 Oct 2007 | Article
Describes a technique for displaying localized text for enums

Introduction

One of the neat things about enumerations in .NET is that you can use data binding to display and select enum values in a list or drop down combo. For instance, consider the following enum definition:

enum SampleEnum
{
    VerySmall,
    Small,
    Medium,
    Large,
    VeryLarge
}

We can display the enumeration values (and allow the user to select a value) by adding a ListBox to a form and setting the DataSource with one line of code:

_enumListBox.DataSource = Enum.GetValues(typeof(SampleEnum));

That's great - when we run our code now the list box shows the enumeration values:

Screenshot - EnumList.jpg

We can get the selected enum value by simply using the list box SelectedItem property:

SampleEnum selectedSampleEnum = (SampleEnum)_enumListBox.SelectedItem;

There are two problems with this technique however. The first problem is that the text we wish to display to the user may not be exactly the same as the enumeration value. In the example above, it would be much nicer to display Very Small with a space between the words. We can't use this as an enumeration value however because enum values cannot have spaces. The second problem is that there is no way to translate the enum values if we want to localize our application (i.e. provide a translated user interface for different cultures).

This article presents a simple solution to the above problems that leverages the power of .NET TypeConverters.

Background

The article Humanizing the Enumerations by Alex Kolesnichenko also addresses the problems discussed above by attaching a custom attribute to each enumeration value and using an adaptor class (EnumToHumanReadableConverter) as the data source. Our approach instead leverages the power of the .NET TypeConverter mechanism to automatically handle conversion to and from localized text and enum values. The benefit of this approach is that not only does it work for data binding (with no extra code), it can also be used anywhere in your application that you need to convert between localized text and enum values.

What is a TypeConverter

TypeConverters are the in-built .NET mechanism for converting objects of one type to another (for instance from an enum value to a string value). When the ListBox control (and other .NET controls) displays enum values, it first converts them to strings using a TypeConverter. The TypeConverter it uses depends on the TypeConverter that has been associated with the type using the System.ComponentModel.TypeConverterAttribute. By default all enum types use the predefined EnumConverter class. As we have seen, the EnumConverter simply converts the enum value to its exact string representation. Fortunately we can define our own derived TypeConverter class and associate it with our enum type when we declare it as follows:

[TypeConverter(typeof(LocalizedEnumConverter))]
public enum SampleEnum
{
    VerySmall,
    Small,
    Medium,
    Large,
    VeryLarge
}

In this solution we define a custom TypeConverter class (LocalizedEnumConverter) that converts enum values to and from string values using localized strings from the project resources.

Using the Code

The sample project code consists of a library (Infralution.Localization) and a separate test application. The library defines a base TypeConverter class (ResourceEnumConverter) that converts enum values to and from strings using a ResourceManager that reads the string values from a compiled RESX file. The ResourceManager that is used to do the lookup is passed to the constructor of the ResourceEnumConverter class. Follow the simple steps below to localize enums in your application using this class.

Define a class derived from ResourceEnumConverter in your application project that passes the ResourceManager for the project RESX file you wish to use for the enum lookups. Typically you would just use the standard project Properties.Resources:

class LocalizedEnumConverter : Infralution.Localization.ResourceEnumConverter
{
    public LocalizedEnumConverter(Type type)
        : base(type, Properties.Resources.ResourceManager)
    {
    }
}

Use the System.ComponentModel.TypeConverterAttribute attribute on each enum declaration to associate this TypeConverter with the enum:

[TypeConverter(typeof(LocalizedEnumConverter))]
public enum SampleEnum
{
    VerySmall,
    Small,
    Medium,
    Large,
    VeryLarge
}

Open the Properties\Resources.resx file in the resources editor and enter the text to display for each enum value. The resource name is just the enum type name followed by the value (underscore separated):

Screenshot - EnglishResx.jpg

Now we are ready to add some localized enum text values. Create a set of French resources by copying the Properties\Resources.resx file to Properties\Resources.fr.resx. Make sure that the "Custom Tool" (in the Properties window) for this new RESX file is blank - or you will end up with some strange compilation errors. Open the Properties\Resources.fr.resx file in the resources editor and enter the translated values:

Screenshot - FrenchResx.jpg

Now set the user locale to French using the Control Panel Regional options and run your application. The enum values are now displayed in French. The sample application demonstrates the above and also allows you to dynamically set the CurrentThread.CurrentCulture property by selecting it from a drop down list:

Screenshot - SampleApp.jpg

The ResourceEnumConverter class also supports converting text value back to enum values. The sample application allows you to test this by entering values into the text box and clicking the Convert button.

Localizing Enums in ASP.NET

In Windows Forms, all of the standard controls use TypeConverters to convert bound data values to display strings. Unfortunately for some reason Microsoft did not use this same approach when developing ASP.NET controls. ASP.NET controls typically just use the Object.ToString() method to convert the bound data value to text. This means that while we can still define our TypeConverter (as described above) it won't be used by default by ASP.NET controls.

To solve this problem we have added a static GetValues method to the ResourceEnumConverter class. This method uses the TypeConverter to return a list of KeyValuePair objects for the given enum type. The Key is the enum value and the Value is the localized display text for that enum. To bind an ASP.NET control we set the DataValueField property of the control to Key and the DataTextField property to Value. Then we bind the control to the list returned by the GetValues method as follows:

protected void Page_Load(object sender, EventArgs e)
{
    _enumListBox.DataSource = 
        LocalizedEnumConverter.GetValues(typeof(SampleEnum));
    this.DataBind();
}

Flag Enumerations

Andy Mase pointed out that the original code posted did not handle bit field enumerations (defined using the Flag attribute). In this case an enumeration value can be a bitwise combination of the named enumeration values. The enum may also define named enumeration values which are bitwise combinations of other named values. In the example below an All value is defined which is the bitwise combination of all other values.

[TypeConverter(typeof(LocalizedEnumConverter))]
[Flags]
public enum TextStyle : byte
{
    None = 0x0,
    Bold = 0x1,
    Italic = 0x2,
    Underline = 0x4,
    All = 0xFF
}

The ResourceEnumConverter class now handles converting bit field enums to and from text. When converting a bit field enum value to text, it first checks if the value is one of the named enumeration values. If it is, then the localized text corresponding to the named value will be used. Otherwise it finds the combination of single bit values that are set and creates the text by concatenating the localized text for these together. For example the value 0x3 would be converted to Bold, Italic in English. The download now includes a separate project (TestLocalizedFlagEnum) that demonstrates using the LocalizedEnumConverter with a bit field enum.

History

  • 2007.08.09 - Initial posting
  • 2007.10.17 - Added handling of flagged enums and localizing enums in ASP.NET

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Grant Frisken

Architect
Infralution
Australia Australia

Member

I am currently the Software Architect at Infralution. Infralution develops .NET components and solutions including:
 
Globalizer - localization for .NET made easy. Let your translators instantly preview translations and even build the localized version of your application without giving away your source code.
 
Infralution Licensing System - simple, secure and affordable licensing for .NET apps and components
 
Virtual Tree - superfast, flexible, databound tree/list view

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
QuestionBug + Hack for ToolStripComboBox. How to do it better? Pinmemberch_cu222:43 4 May '08  
Generalexcellent article Pinmemberpillesoft8:45 27 Apr '08  
GeneralIf you are using App_Code and WebSite model... Pinmemberj.spurlin7:48 21 Oct '07  
GeneralRe: If you are using App_Code and WebSite model... [modified] PinmemberDuong Tran21:44 23 Jan '08  
GeneralRe: If you are using App_Code and WebSite model... Pinmembersujatat21:30 16 Jun '09  
GeneralRe: If you are using App_Code and WebSite model... Pinmembersujatat21:16 16 Jun '09  
GeneralVB.NET ResourceEnumConverter PinmemberDave Hary15:22 19 Oct '07  
Great job, indeed.   Thank you.   I included below a working VB code for the resource enum converter hopfully with sufficient attributions to the source.   I made a few minor changes to meet design rules per FX Cop 1.36 beta 2.
 
   ''' <summary>
   ''' Defines a type converter for enum values that converts enum values to
   ''' and from string representations using resources
   ''' </summary>
   ''' <remarks>
   ''' This class makes localization of display values for enums in a project easy.   Simply
   ''' derive a class from this class and pass the ResourceManagerin the constructor.  
   '''
   ''' <code lang="C#" escaped="true" >
   ''' class LocalizedEnumConverter : ResourceEnumConverter
   ''' {
   '''      public LocalizedEnumConverter(Type type)
   '''            : base(type, Properties.Resources.ResourceManager)
   '''      {
   '''      }
   ''' }     
   ''' </code>
   '''
   ''' <code lang="Visual Basic" escaped="true" >
   ''' Public Class LocalizedEnumConverter
   '''      Inherits ResourceEnumConverter
   '''      Public Sub New(ByVal sType as Type)
   '''            MyBase.New(sType, My.Resources.ResourceManager)
   '''      End Sub
   ''' End Class     
   '''
   ''' ' Tag the enum with a TypeConverter (using square in place of angle brackets)
   ''' [System.ComponentModel.TypeConverter(GetType(LocalizedEnumConverter))] _
   ''' Public Enum MyEnum
   '''   [System.ComponentModel.Description("None")] None
   '''   [System.ComponentModel.Description("Description A")] ItemA
   '''   [System.ComponentModel.Description("Description B")] ItemB
   ''' End Enum
   '''
   ''' ' Initialize the control to display localized values
   ''' Me._comboBox.FormattingEnabled = True
   '''
   ''' ' Display localized values
   ''' ' Because the license enum has a type converter attribute,
   ''' ' this will automatically display the localized text.
   ''' Me._comboBox.DataSource = System.Enum.GetValues(GetType(MyEnum))
   '''
   ''' ' get value from localized text
   '''   Dim converter As TypeConverter = TypeDescriptor.GetConverter(GetType(MyEnum))
   '''   Dim value As Object = converter.ConvertFromString(MyTextValue)
   '''
   ''' </code>
   '''
   '''
   ''' Then define the enum values in the resource editor.   The names of
   ''' the resources are simply the enum value prefixed by the enum type name with an
   ''' underscore separator eg MyEnum_MyValue.   You can then use the TypeConverter attribute
   ''' to make the LocalizedEnumConverter the default TypeConverter for the enums in your
   ''' project.
   ''' </remarks>
   ''' <history date="10/18/2007" by="David Hary" revision="1.0.2847.x">
   ''' Copyright 2007 Infralution www.infralution.com
   ''' Converted to VB.
   ''' http://www.codeproject.com/csharp/LocalizingEnums.asp
   ''' </history>
   Public Class ResourceEnumConverter
      Inherits System.ComponentModel.EnumConverter
 
      Private Class LookupTable
         Inherits System.Collections.Generic.Dictionary(Of String, Object)
      End Class
 
#Region " CONSTRUCTORS   and   DESTRUCTORS "
 
      ''' <summary>
      ''' Create a new instance of the converter using translations from the given resource manager
      ''' </summary>
      ''' <param name="type"></param>
      ''' <param name="resourceManager"></param>
      Public Sub New(ByVal type As Type, ByVal resourceManager As System.Resources.ResourceManager)
         MyBase.New(type)
         _resourceManager = resourceManager
         Dim flagAttributes As Object() = type.GetCustomAttributes(GetType(FlagsAttribute), True)
         _isFlagEnum = flagAttributes.Length > 0
         If _isFlagEnum Then
            _flagValues = System.Enum.GetValues(type)
         End If
      End Sub
 
#End Region
 
      Private _resourceManager As System.Resources.ResourceManager
 
      Private _isFlagEnum As Boolean
 
      Private _flagValues As Array
 
      Private _lookupTables As System.Collections.Generic.Dictionary(Of Globalization.CultureInfo, LookupTable) = New System.Collections.Generic.Dictionary(Of Globalization.CultureInfo, LookupTable)()
      ''' <summary>
      ''' Get the lookup table for the given culture (creating if necessary)
      ''' </summary>
      ''' <param name="culture"></param>
      ''' <returns></returns>
      Private Function GetLookupTable(ByVal culture As Globalization.CultureInfo) As LookupTable
         Dim result As LookupTable = Nothing
         If culture Is Nothing Then
            culture = Globalization.CultureInfo.CurrentCulture
         End If
 
         If (Not _lookupTables.TryGetValue(culture, result)) Then
            result = New LookupTable()
            For Each value As Object In GetStandardValues()
               Dim text As String = String.Empty
               text = GetValueText(culture, value)
               If text IsNot Nothing Then
                  result.Add(text, value)
               End If
            Next value
            _lookupTables.Add(culture, result)
         End If
         Return result
      End Function
 
      ''' <summary>
      ''' Return the text to display for a simple value in the given culture
      ''' </summary>
      ''' <param name="culture">The culture to get the text for</param>
      ''' <param name="value">The enum value to get the text for</param>
      ''' <returns>The localized text</returns>
      ''' <history date="10/19/2007" by="David Hary" revision="1.0.2848.x">
      ''' Add format provider to String.Format.
      ''' </history>
      Private Function GetValueText(ByVal culture As Globalization.CultureInfo, ByVal value As Object) As String
         Dim type As Type = value.GetType()
         Dim resourceName As String = String.Format(Globalization.CultureInfo.CurrentCulture, _
               "{0}_{1}", type.Name, value.ToString())
         Dim result As String = _resourceManager.GetString(resourceName, culture)
         If result Is Nothing Then
            result = resourceName
         End If
         Return result
      End Function
 
      ''' <summary>
      ''' Return true if the given value is can be represented using a single bit
      ''' </summary>
      ''' <param name="value"></param>
      ''' <returns></returns>
      ''' <history date="10/19/2007" by="David Hary" revision="1.0.2848.x">
      ''' Mark as shared.
      ''' </history>
      Private Shared Function IsSingleBitValue(ByVal value As ULong) As Boolean
         Select Case value
            Case 0
               Return False
            Case 1
               Return True
            Case Else
               Return (value And (value - 1UL)) = 0
         End Select
      End Function
 
      ''' <summary>
      ''' Return the text to display for a flag value in the given culture
      ''' </summary>
      ''' <param name="culture">The culture to get the text for</param>
      ''' <param name="value">The flag enum value to get the text for</param>
      ''' <returns>The localized text</returns>
      ''' <history date="10/19/2007" by="David Hary" revision="1.0.2848.x">
      ''' Add format provider to Convert.ToUInt32.
      ''' Add format provider to String.Format.
      ''' </history>
      Private Function GetFlagValueText(ByVal culture As Globalization.CultureInfo, ByVal value As Object) As String
         ' if there is a standard value then use it
         '
         If System.Enum.IsDefined(value.GetType(), value) Then
            Return GetValueText(culture, value)
         End If
 
         ' otherwise find the combination of flag bit values
         ' that makes up the value
         '
         Dim lValue As ULong = Convert.ToUInt32(value, Globalization.CultureInfo.CurrentCulture)
         Dim result As String = Nothing
         For Each flagValue As Object In _flagValues
            Dim lFlagValue As ULong = Convert.ToUInt32(flagValue, Globalization.CultureInfo.CurrentCulture)
            If ResourceEnumConverter.IsSingleBitValue(lFlagValue) Then
               If (lFlagValue And lValue) = lFlagValue Then
                  Dim valueText As String = GetValueText(culture, flagValue)
                  If result Is Nothing Then
                     result = valueText
                  Else
                     result = String.Format(Globalization.CultureInfo.CurrentCulture, _
                        "{0}, {1}", result, valueText)
                  End If
               End If
            End If
         Next flagValue
         Return result
      End Function
 
      ''' <summary>
      ''' Return the Enum value for a simple (non-flagged enum)
      ''' </summary>
      ''' <param name="culture">The culture to convert using</param>
      ''' <param name="text">The text to convert</param>
      ''' <returns>The enum value</returns>
      Private Function GetValue(ByVal culture As Globalization.CultureInfo, ByVal text As String) As Object
         Dim lookupTable As LookupTable = GetLookupTable(culture)
         Dim result As Object = Nothing
         lookupTable.TryGetValue(text, result)
         Return result
      End Function
 
      ''' <summary>
      ''' Return the Enum value for a flagged enum
      ''' </summary>
      ''' <param name="culture">The culture to convert using</param>
      ''' <param name="text">The text to convert</param>
      ''' <returns>The enum value</returns>
      ''' <history date="10/19/2007" by="David Hary" revision="1.0.2848.x">
      ''' Add format provider to Convert.ToUInt32.
      ''' </history>
      Private Function GetFlagValue(ByVal culture As Globalization.CultureInfo, ByVal text As String) As Object
         Dim lookupTable As LookupTable = GetLookupTable(culture)
         Dim textValues As String() = text.Split(","c)
         Dim result As ULong = 0
         For Each textValue As String In textValues
            Dim value As Object = Nothing
            Dim trimmedTextValue As String = textValue.Trim()
            If (Not lookupTable.TryGetValue(trimmedTextValue, value)) Then
               Return Nothing
            End If
            result = result Or Convert.ToUInt32(value, Globalization.CultureInfo.CurrentCulture)
         Next textValue
         Return System.Enum.ToObject(EnumType, result)
      End Function
 
      ''' <summary>
      ''' Convert string values to enum values
      ''' </summary>
      ''' <param name="context"></param>
      ''' <param name="culture"></param>
      ''' <param name="value"></param>
      ''' <returns></returns>
      Public Overloads Overrides Function ConvertFrom(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal culture As System.Globalization.CultureInfo, ByVal value As Object) As Object
         If TypeOf value Is String Then
            Dim result As Object
            If (_isFlagEnum) Then
               result = GetFlagValue(culture, CStr(value))
            Else
               result = GetValue(culture, CStr(value))
            End If
            If result Is Nothing Then
               result = MyBase.ConvertFrom(context, culture, value)
            End If
            Return result
         Else
            Return MyBase.ConvertFrom(context, culture, value)
         End If
      End Function
 
      ''' <summary>
      ''' Convert the enum value to a string
      ''' </summary>
      ''' <param name="context"></param>
      ''' <param name="culture"></param>
      ''' <param name="value"></param>
      ''' <param name="destinationType"></param>
      ''' <returns></returns>
      Public Overloads Overrides Function ConvertTo(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal culture As System.Globalization.CultureInfo, ByVal value As Object, ByVal destinationType As Type) As Object
         If Not value Is Nothing AndAlso destinationType Is GetType(String) Then
            Dim result As Object
            If (_isFlagEnum) Then
               result = GetFlagValueText(culture, value)
            Else
               result = GetValueText(culture, value)
            End If
            Return result
         Else
            Return MyBase.ConvertTo(context, culture, value, destinationType)
         End If
      End Function
 
      ''' <summary>
      ''' Convert the given enum value to string using the registered type converter
      ''' </summary>
      ''' <param name="value">The enum value to convert to string</param>
      ''' <returns>The localized string value for the enum</returns>
      Public Overloads Shared Function ConvertToString(ByVal value As System.Enum) As String
         Dim converter As System.ComponentModel.TypeConverter = System.ComponentModel.TypeDescriptor.GetConverter(value.GetType())
         Return converter.ConvertToString(value)
      End Function
 
      ''' <summary>
      ''' Return a list of the enum values and their associated display text for the given enum type
      ''' </summary>
      ''' <param name="enumType">The enum type to get the values for</param>
      ''' <param name="culture">The culture to get the text for</param>
      ''' <returns>
      ''' A list of KeyValuePairs where the key is the enum value and the value is the text to display
      ''' </returns>
      ''' <remarks>
      ''' This method can be used to provide localized binding to enums in ASP.NET applications.   Unlike
      ''' windows forms the standard ASP.NET controls do not use TypeConverters to convert from enum values
      ''' to the displayed text.   You can bind an ASP.NET control to the list returned by this method by setting
      ''' the DataValueField to "Key" and theDataTextField to "Value".
      ''' </remarks>
      ''' <history date="10/19/2007" by="David Hary" revision="1.0.2848.x">
      ''' Make private complying with Microsoft.Design Rule CA1002:DoNotExposeGenericLists
      ''' </history>
      Private Shared Function getValuesList(ByVal enumType As Type, ByVal culture As Globalization.CultureInfo) _
         As System.Collections.Generic.List(Of System.Collections.Generic.KeyValuePair(Of [Enum], String))
         Dim result As System.Collections.Generic.List(Of System.Collections.Generic.KeyValuePair(Of [Enum], String)) = New System.Collections.Generic.List(Of System.Collections.Generic.KeyValuePair(Of [Enum], String))()
         Dim converter As System.ComponentModel.TypeConverter = System.ComponentModel.TypeDescriptor.GetConverter(enumType)
         For Each value As System.Enum In System.Enum.GetValues(enumType)
            Dim pair As System.Collections.Generic.KeyValuePair(Of [Enum], String) = New System.Collections.Generic.KeyValuePair(Of [Enum], String)(value, converter.ConvertToString(Nothing, culture, value))
            result.Add(pair)
         Next value
         Return result
      End Function
 
      ''' <summary>
      ''' Return a read only collection of the enum values and their associated display text for the given enum type
      ''' </summary>
      ''' <param name="enumType">The enum type to get the values for</param>
      ''' <param name="culture">The culture to get the text for</param>
      ''' <returns>
      ''' A list of KeyValuePairs where the key is the enum value and the value is the text to display
      ''' </returns>
      ''' <remarks>
      ''' This method can be used to provide localized binding to enums in ASP.NET applications.   Unlike
      ''' windows forms the standard ASP.NET controls do not use TypeConverters to convert from enum values
      ''' to the displayed text.   You can bind an ASP.NET control to the list returned by this method by setting
      ''' the DataValueField to "Key" and theDataTextField to "Value".
      ''' </remarks>
      ''' <history date="10/19/2007" by="David Hary" revision="1.0.2848.x">
      ''' Expose in place of the List complying with Microsoft.Design Rule CA1002:DoNotExposeGenericLists
      ''' </history>
      Public Shared Function GetValues(ByVal enumType As Type, ByVal culture As Globalization.CultureInfo) _
         As System.Collections.ObjectModel.ReadOnlyCollection(Of System.Collections.Generic.KeyValuePair(Of [Enum], String))
         Return New ObjectModel.ReadOnlyCollection(Of System.Collections.Generic.KeyValuePair(Of [Enum], String))(getValuesList(enumType, culture))
      End Function
 
      ''' <summary>
      ''' Return a list of the enum values and their associated display text for the given enum type in the current UI Culture
      ''' </summary>
      ''' <param name="enumType">The enum type to get the values for</param>
      ''' <returns>
      ''' A list of KeyValuePairs where the key is the enum value and the value is the text to display
      ''' </returns>
      ''' <remarks>
      ''' This method can be used to provide localized binding to enums in ASP.NET applications.   Unlike
      ''' windows forms the standard ASP.NET controls do not use TypeConverters to convert from enum values
      ''' to the displayed text.   You can bind an ASP.NET control to the list returned by this method by setting
      ''' the DataValueField to "Key" and theDataTextField to "Value".
      ''' </remarks>
      ''' <history date="10/19/2007" by="David Hary" revision="1.0.2848.x">
      ''' Expose in place of the List complying with Microsoft.Design Rule CA1002:DoNotExposeGenericLists
      ''' </history>
      Public Shared Function GetValues(ByVal enumType As Type) _
            As System.Collections.ObjectModel.ReadOnlyCollection(Of System.Collections.Generic.KeyValuePair(Of [Enum], String))
         Return GetValues(enumType, Globalization.CultureInfo.CurrentUICulture)
      End Function
 
   End Class
 


GeneralRe: VB.NET ResourceEnumConverter PinmemberGrant Frisken23:01 19 Oct '07  
GeneralRe: VB.NET ResourceEnumConverter Pinmemberdwilliss10:29 3 Apr '10  
GeneralGreat Job Pinmembermerlin9813:49 18 Oct '07  
GeneralBad idea; here is a better way PinmemberSAKryukov8:35 18 Sep '07  
GeneralRe: Bas idea; here is a better way PinmemberGrant Frisken12:39 18 Sep '07  
GeneralRe: Bas idea; here is a better way PinmemberSAKryukov14:17 18 Sep '07  
GeneralI must apologize PinmemberSAKryukov5:37 19 Sep '07  
GeneralRe: I must apologize PinmemberGrant Frisken12:36 19 Sep '07  
GeneralYour point taken, but then, use Assertion PinmemberSAKryukov6:01 20 Sep '07  
GeneralThis is an addition to your work.... PinmemberJoe Sonderegger7:12 7 Sep '07  
GeneralCannot use this Enum in Settings PinmemberKarel Kral4:40 4 Sep '07  
GeneralRe: Cannot use this Enum in Settings PinmemberGrant Frisken13:11 4 Sep '07  
QuestionHow to get selected item value (ComboBox)? PinmemberKarel Kral2:45 4 Sep '07  
AnswerRe: How to get selected item value (ComboBox)? PinmemberGrant Frisken12:55 4 Sep '07  
GeneralNice idea, but how to get SelectedValue PinmemberKarel Kral2:44 4 Sep '07  
GeneralFlags attribute [modified] PinmemberAndy Mase2:26 22 Aug '07  
GeneralRe: Flags attribute PinmemberGrant Frisken12:11 22 Aug '07  
GeneralRe: Flags attribute PinmemberGrant Frisken21:44 17 Oct '07  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web01 | 2.5.120529.1 | Last Updated 17 Oct 2007
Article Copyright 2007 by Grant Frisken
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid