ContentAlignment枚举值的说明

时间:2016-01-23 08:50:06

标签: c# .net enums

System.Drawing.ContentAlignment枚举如下所示:

namespace System.Drawing
{
    // Summary:
    //     Specifies alignment of content on the drawing surface.
    [Editor("System.Drawing.Design.ContentAlignmentEditor, System.Drawing.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
    public enum ContentAlignment
    {
        TopLeft = 1,
        TopCenter = 2,
        TopRight = 4,
        MiddleLeft = 16,
        MiddleCenter = 32,
        MiddleRight = 64,
        BottomLeft = 256,
        BottomCenter = 512,
        BottomRight = 1024,
    }
}

为什么值以旗帜式定义?为什么8和128缺少?

2 个答案:

答案 0 :(得分:4)

也许让ContentAlignment枚举参与按位操作。

  

但为什么它没有用FlagsAttribute装饰?

因为它不打算被客户端用作按位标志,所以它们没有用FlagsAttribute修饰枚举。

您可以参考.net框架源,了解它们如何通过按位操作很好地使用ContentAlignment

ControlPaint.TranslateAlignment使用它,您可以在top of the class

中看到使用按位OR的声明
private static readonly ContentAlignment anyRight  = ContentAlignment.TopRight | ContentAlignment.MiddleRight | ContentAlignment.BottomRight;
private static readonly ContentAlignment anyBottom = ContentAlignment.BottomLeft | ContentAlignment.BottomCenter | ContentAlignment.BottomRight;
private static readonly ContentAlignment anyCenter = ContentAlignment.TopCenter | ContentAlignment.MiddleCenter | ContentAlignment.BottomCenter;
private static readonly ContentAlignment anyMiddle = ContentAlignment.MiddleLeft | ContentAlignment.MiddleCenter | ContentAlignment.MiddleRight;

这应该回答“为什么以旗帜式的方式定义的价值”。

  

为什么8和128缺少?

我不知道。如果有人有,评论将不胜感激。

答案 1 :(得分:2)

昨天我看到一位来自匿名用户的建议编辑试图解释为什么缺少8​​和128。它被拒绝了,因为它被编辑成现有答案。

我认为这只是猜测,而不是一个明确的答案,但听起来似乎有道理,所以这里(引自Sriram Sakthivel的回答):

  
    

为什么8和128缺少?

  
     

我不知道。如果有人有,评论将不胜感激。

让我们拿一下:

<00> 0000 0000 0000 0000

没有8,128或1024以上的原因如下: 对于前3个(TopLeft,TopCenter和TopRight),取前4位:

TopLeft = 1 (0001)
TopCenter = 2 (0010)
TopRight = 4 (0100)

然后是第二个3(MiddleLeft,MiddleCenter和MiddleRight)

MiddleLeft = 16 (0001[0000])
MiddleCenter = 32 (0010[0000])
MiddleRight = 64 (0100[0000])

然后是最后3(BottomLeft,BottomCenter和BottomRight)

BottomLeft = 256 (0001[00000000])
BottomCenter = 512 (0010[00000000])
BottomRight = 1024 (0100[00000000])

这使得按位操作变得容易,不仅是垂直操作,也是水平操作。