Hur skrivs property för att endast 'System' color skall kunna väljas för en 'User Control'. Tja, du skulle ju kunna börja med att inte tillåta andra färger än systemfärger:Endast 'System' color i 'color picker' i properties
I exemplet nedan får jag upp även 'Web' och 'Custom' att välja på. :(
<code>
[Category("Appearance"),Description("Blaha blaha."),DefaultValue("SystemBrushes.Menu")]
public Color HiLiteBackground
{
get
{
return colorBrushHiLite;
}
set
{
colorBrushHiLite = value;
}
}
</code>Sv: Endast 'System' color i 'color picker' i properties
public Color HiLiteBackground
{
get
{
return colorBrushHiLite;
}
set
{
foreach (PropertyInfo prop in typeof(SystemColors).GetProperties(BindingFlags.Public | BindingFlags.Static))
{
if (prop.PropertyType == typeof(Color))
{
Color systemColor = (Color) prop.GetValue(null, null);
if (value == systemColor)
{
isValid = true;
}
}
}
if (!isValid)
{
throw new ArgumentException("Only system colors allowed");
}
colorBrushHiLite = value;
}
}
Detta hindrar dock inte att man får upp 'Web' och 'Custom' att välja på. För att fixa detta tror jag att du måste skriva din egen UI Type Editor och speca att den skall användas istället för den inbyggda:
[Editor(typeof(MySystemColorEditor), typeof(UITypeEditor))]
public Color HiLiteBackground
{
}
På bl.a. MSDN hittar du exempel på hur du skriver en UI Type Editor. Möjligen kan du utgå/ärva från ColorEditor, men det verkar inte vara någon bra idé då det i dokumentationen står: "This type supports the .NET Framework infrastructure and is not intended to be used directly from your code."...