公开自定义控件属性

时间:2009-06-12 20:35:07

标签: visual-studio controls

我正在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;
     }
 }

我需要帮助的地方是根据所选方向返回并设置枚举值。也许还有另一种方式呢?

希望这是可行的吗?

由于

3 个答案:

答案 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的布尔值。