使用.net 4.0我有一个win形式的组合框,我从字典绑定,这工作正常。但是,我想更改用户在下拉列表中看到的名称。
例如..我希望下拉菜单说10%,20%,30%...... 100%。
这是我的班级,其中包含百分比和各自的身高值。
enum SizeType : int
{
Height_10_Pct = 40,
Height_20_Pct = 80,
Height_30_Pct = 120,
Height_40_Pct = 160,
Height_50_Pct = 200,
Height_60_Pct = 240,
Height_70_Pct = 280,
Height_80_Pct = 320,
Height_90_Pct = 360,
Height_100_Pct = 400)
}
创建字典项
public static Dictionary<string, int> ThumbSizeOptions = new Dictionary<string, int>(BuildThumbSizeOptions());
public static Dictionary<string, int> BuildThumbSizeOptions()
{
ThumbSizeOptions = new Dictionary<string, int>();
foreach (SizeType val in Enum.GetValues(typeof(SizeType)))
{
ThumbSizeOptions.Add(val.ToString(), (int)((val)));
}
return ThumbSizeOptions;
}
要在Win Form中的组合框中绑定的代码:
ddlThumbSize.DataSource = new BindingSource(ThumbSizePref.ThumbSizeOptions, null);
ddlThumbSize.DisplayMember = "Key";
ddlThumbSize.ValueMember = "Value";
提前谢谢。
答案 0 :(得分:2)
尝试ListControl.Format事件:( ComboBox
是ListControl
)
ddlThumbSize.Format += (s, e) => {
e.Value += " %";
};
答案 1 :(得分:1)
在您的特定情况下,您只需使用String.Format("{0}%", ((int)val) >> 2)
作为Dictionary
中的关键字:
ThumbSizeOptions.Add(String.Format("{0}%", ((int)val) >> 2), (int)val);
更通用的方法是使用自定义属性。代码:
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Method)]
public sealed class EnumDisplayNameAttribute : Attribute
{
public readonly string Displayname;
public EnumDisplayNameAttribute(string displayname)
{
Displayname = displayname;
}
public static EnumDisplayNameAttribute Get<T>(T item)
{
FieldInfo member = typeof(T).GetField(item.ToString());
if (member == null)
return null;
object[] attrs = member.GetCustomAttributes(typeof(EnumDisplayNameAttribute), true);
return attrs.Length == 0 ? null : attrs[0] as EnumDisplayNameAttribute;
}
}
enum SizeType : int
{
[EnumDisplayName("10%")]
Height_10_Pct = 40,
[EnumDisplayName("20%")]
Height_20_Pct = 80,
[EnumDisplayName("30%")]
Height_30_Pct = 120,
[EnumDisplayName("40%")]
Height_40_Pct = 160,
[EnumDisplayName("50%")]
Height_50_Pct = 200,
[EnumDisplayName("60%")]
Height_60_Pct = 240,
[EnumDisplayName("70%")]
Height_70_Pct = 280,
[EnumDisplayName("80%")]
Height_80_Pct = 320,
[EnumDisplayName("90%")]
Height_90_Pct = 360,
[EnumDisplayName("100%")]
Height_100_Pct = 400
}
public static Dictionary<string, int> ThumbSizeOptions = new Dictionary<string, int>(BuildThumbSizeOptions());
public static Dictionary<string, int> BuildThumbSizeOptions()
{
ThumbSizeOptions = new Dictionary<string, int>();
foreach (SizeType val in Enum.GetValues(typeof(SizeType)))
{
ThumbSizeOptions.Add(EnumDisplayNameAttribute.Get(val).Displayname, (int)val);
}
return ThumbSizeOptions;
}
答案 2 :(得分:1)
在您的BuildThumbSizeOptions()
中,您可以像这样计算您的comboxbox值:
public static Dictionary<string, int> BuildThumbSizeOptions()
{
ThumbSizeOptions = new Dictionary<string, int>();
var max = (double)SizeType.Height_100_Pct;
foreach (int val in Enum.GetValues(typeof(SizeType)))
{
double perc = 100.0 / max * (double)val;
ThumbSizeOptions.Add(perc + "%", val);
}
return ThumbSizeOptions;
}
你现在的方式没有动态。
扩展此功能可以丢弃静态枚举SizeType
并仅使用一个保持最大(100%)高度的变量。
public static double MAXIMUM_HEIGHT = 400.0;
public static Dictionary<string, int> BuildThumbSizeOptions()
{
ThumbSizeOptions = new Dictionary<string, int>();
for (int perc = 10; perc <= 100; perc += 10)
{
var size = MAXIMUM_HEIGHT / 100.0 * perc;
ThumbSizeOptions.Add(perc + "%", (int)size);
}
return ThumbSizeOptions;
}
希望它有所帮助,尽管还有其他答案; - )