I min klassfil: Enums kan dekoreras med sträng värde: blog.spontaneouspublicity.com/2008/01/17/associating-strings-with-enums-in-c/ Hej, Tackar för tiden du lägger ner på mig, men jag får det fortfarande inte till att fungera. Du kan inte använda Enum.GetNames utan måste gå igenom alla enum värdena med foreach och lägga till dem en och en med namnet från Description texten och hjälpmetoden.Enum till en combobox
public enum TypeOfSeats
{
Passanger_Bus,
Passenger_Train_Cabin,
Airplane_Cabin
}
I min GUIfil:
private void FillSeatTypeList()
{
cmbSeatType.Items.AddRange(Enum.GetNames(typeof(TypeOfSeats)));
cmbSeatType.SelectedIndex = (int)BusType.PassangerBus;
}
Det jag vill är att ändra innehållet i comboboxen så att den värdena (texten) kan innehålla blanksteg.
Passanger Bus
Passenger Train Cabin
Airplane Cabin
Jag vet att varje medlem i enumen har ett int värde, men hur får jag fatt i det och ändra innehållet som jag önskar?
Sv: Enum till en combobox
Se www.codeproject.com/KB/cs/stringenum.aspx
eller blog.spontaneouspublicity.com/2008/01/17/associating-strings-with-enums-in-c/
/RubenSv:Enum till en combobox
Exemplet ovan är så jag vill ha det, men jag får det inte till att fungera ändå.
I mitt fall borde Enumen se ut så här
public enum TypeOfSeats
{
[Description("Passanger Bus")]
Passenger_Bus,
[Description("Train Cabin")]
Train_Cabin,
[Description("Airplane Cabin")]
Airplane_Cabin
}
Men jag får kompileringsfel
The type or namespace name 'Description' could not be found (are you missing a using directive or an assembly reference?)
Dessutom är jag osäker på var jag ska lägga in funktionen, ska den var i classen eller i GUI:en?
public static string GetEnumDescription(Enum value)
{
FieldInfo fi = value.GetType().GetField(value.ToString());
DescriptionAttribute[] attributes =
(DescriptionAttribute[])fi.GetCustomAttributes(
typeof(DescriptionAttribute),
false);
if (attributes != null &&
attributes.Length > 0)
return attributes[0].Description;
else
return value.ToString();
}
Min combobox heter cmbSeatType.
Det ska väl tilläggas att jag är nybörjare med programmering.
Tackar Ruben för den hjälp jag fick, även om jag inte har lyckats ännu. Hoppas på ny hjälp.Sv: Enum till en combobox
Först och främst så måste du ha med
using System.ComponentModel
där du deklarerar din enum, alltså i filen för klassen.
Sedan måste du ha med
using System.ComponentModel;
using System.Reflection;
i filen där GetEnumDescription() funktionen finns. Denna kan du lägga i en egen klass eller generell utility klass, kanske i en egen dll (ett eget projekt i solutionen). Detta är en funktion som inte behöver veta något om varken din klass eller comboboxen. Du kanske kan göra ett eget namespace för diverse hjälpklasser som du sedan kan använda i andra projekt.
Hoppas detta hjälper.
/Ruben
Sv:Enum till en combobox
I min GUI har jag följande funktion
private void FillSeatTypeList()
{
cmbSeatType.Items.AddRange(Enum.GetNames(typeof(TypeOfSeats)));
cmbSeatType.SelectedIndex = (int)BusType.PassangerBus;
}
I min min fil där jag deklarerar Enumen ser ut så här:
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.ComponentModel;
using System.Reflection;
public enum TypeOfSeats
{
[Description("Passanger Bus")]
Passenger_Bus,
[Description("Train Cabin")]
Train_Cabin,
[Description("Airplane Cabin")]
Airplane_Cabin
}
namespace GeneralBookingSystem
{
public class SeatBooking
{
.......(allt vad klassen innehåller)
}
}
Och till sist filen med Funktionen för att hämta värdet:
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Reflection;
namespace GeneralBookingSystem
{
class GetEnum
{
public static string GetEnumDescription(Enum value)
{
FieldInfo fi = value.GetType().GetField(value.ToString());
DescriptionAttribute[] attributes =
(DescriptionAttribute[])fi.GetCustomAttributes(
typeof(DescriptionAttribute),
false);
if (attributes != null &&
attributes.Length > 0)
return attributes[0].Description;
else
return value.ToString();
}
}
}
Sv: Enum till en combobox
Något i stil med:
foreach(TypeOfSeats seat in Enum.GetValues(typeof(TypeOfSeats))){
cmbSeatType.Items.Add(EnumHelper.GetEnumDescription(seat));
}
cmbSeatType.SelectedText=EnumHelper.GetEnumDescription(defaultTypeOfSeats);
/Ruben