所以我有一个包含3个控件的主窗体,我希望使用枚举来控制Enable
属性。
所有这些控件都引用了包含Data
值级别的Enum
。
enum Level
{
Red,
Yellow,
Green
}
因此,如果它是Red
,我希望RedControl
启用,如果它是yellow
,则启用YellowControl
等等。
如何以最少的代码和优雅来做到最好?
我尝试在IsRed
上添加3个属性,例如IsYellow
,Data
等,以便将它们连接起来。但后来我不知道如何从这些属性中检测Level
的变化。
答案 0 :(得分:1)
[Flags]
enum Level:int
{
Red = 1,
Green = 2,
Blue = 4,
Yellow = Red | Green,
White = Red | Green | Blue
}
public class myControl : WebControl
{
public Level color;
...
}
public static class extension
{
public static bool Compare(this Level source, Level comparer)
{
return (source & comparer) > 0; // will check RGB base color
//return (source & comparer) == source; // will check for exact color
}
}
使用
var color = Level.Red;
bool result = color.Compare(Level.Green);
myControl test = new myControl();
test.Enabled = test.Color.Compare(Level.Red);
答案 1 :(得分:0)
RedControl.Enabled = ((value & Level.Red) != 0)
答案 2 :(得分:0)
我不确定数据绑定...但是如何将启用代码放在属性集中呢?
即
public YourClass
{
Level _level;
public Level level
{
get{ return _level;}
set
{
_level = value;
if(_level == Level.Green) { greenControl.Enable = true; //plus disable others }
if(_level == Level.Yellow) { yellowControl.Enable = true; //plus disable others }
if(_level == Level.Red) { redControl.Enable = true; //plus disable others }
}
}
}
这样你的财产就像正常一样工作(我想你可以对它进行数据绑定但我不确定)并且当它被改变时,控制器将会改变。
答案 3 :(得分:0)
您的绑定源类可以实现System.ComponentModel.INotifyPropertyChanged
。我认为这是一种在Windows窗体中进行数据绑定的灵活方式。
这是关于codeproject的一篇文章,展示了如何做到这一点。不过,我还没有深入分析过它。