我正在VisualStudio中开发一个新的自定义控件,并想知道是否可以在设计时限制属性选择。
为了说明问题,有两个属性相互依赖 - 方向和文本。控件本身是矩形的,方向可以是垂直的或水平的。我想要的是限制textide属性,以便如果方向是垂直的,textide只能是左或右,如果方向是水平的,textide只能是顶部或底部。
显然,您可以在set属性方法中通过检查其他属性在运行时执行此操作,但我想在属性窗口中执行此操作作为设计时间,因此不会有人选择错误的属性组合,然后什么都没有或者在项目运行时显示错误的信息。
目前我有这个:
public enum VerticalTextSide { Left, Right }
public enum HorizontalTextSide { Top, Bottom }
public enum TextSide { }
public enum Orientation { Vertical, Horizontal }
private VerticalTextSide vts;
private HorizontalTextSide hts;
private TextSide db;
private Orientation or;
public TextSide textSide
{
get
{
if (or == Orientation.Vertical)
{
[need help!!]
}
else
{
[need help!!]
}
}
set
{
[need help!!]
}
}
public Orientation orientation
{
get
{
return or;
}
set
{
or = value;
}
}
我需要帮助的地方是根据所选方向返回并设置枚举值。也许还有另一种方式呢?
希望这是可行的吗?
由于
答案 0 :(得分:0)
不确定如何在设计时限制它 - 我已经看过编译时和运行时检查。
但是,您可能需要考虑通过组合Orientation和TextSide来简化枚举。
例如,System.Windows.Forms.TabControl具有Alignment属性(TabAlignment枚举),它指定Top,Bottom,Left和Right。隐含在此水平/垂直中。
通过这样做,您可以简化界面并消除错误和无效组合的可能性。
答案 1 :(得分:0)
问题在于,这将是更进一步的,包括文本方向,你可以有LeftToRight或RightToLeft,其中任何一个都可以接受水平控制,但不适用于你可能需要TopToBottom或BottomToTop的垂直控制!!
是通过getter / setter类型方法向控件添加属性的唯一方法吗?
真的没有办法动态改变依赖他人的属性吗?这似乎是一个很大的不足。
答案 2 :(得分:0)
我知道这可能看起来有点笨拙但是不使用左/右或上/下而只是位置1 /位置2怎么样?例如,在水平设置中,Position1将为Left(至少在考虑LeftToRight时),而在垂直设置中,Position2将为Top(假设为TopToBottom)。
你也可以忘记TopToBottom / BottomToTop或LeftToRight / RightToLeft,但只需使用一个名为IsReverseOrder的布尔值。