1

如何检查控件的锚属性的值?

假设我有一个控件,代码开发人员可以在设计器中设置锚值。在 C# 代码中,如何检查是否为控件设置了任何特定的锚值?

例如,假设下面的 Sender 控件具有由开发人员为此控件设置的 Top、Left 和 Right 锚点。检查 Top 锚点是否设置的 if 语句是什么样的?

private int DetermineMouseWhere(Control Sender)
{
    if (Sender.Anchor == AnchorStyles.Top) // what should this be like
    {
        //do something
    }
}

你们中的一些人可能会问为什么要这样做...如果锚点设置在控件的那一侧,我不想在此控件上提供调整大小的操作。

4

3 回答 3

5

因为 AnchorStyles 有 [Flags] 属性,所以可以使用Enum.HasFlag()方法来确定它:

if (Sender.Anchor.HasFlag(AnchorStyles.Top))

对于 .Net 3.5 或更早版本:

if ((Sender.Anchor & AnchorStyles.Top) != 0)

或者:

if ((Sender.Anchor & AnchorStyles.Top) == AnchorStyles.Top)
于 2013-02-18T16:03:32.587 回答
2

由于 Enum.HasFlag() 仅从 .NET 4 开始受支持,因此这是一种适用于早期版本的方法:

if (Sender.Anchor & AnchorStyles.Top != 0)

对于多个锚点(例如左上角)

if (Sender.Anchor & (AnchorStyles.Top | AnchorStyles.Left) == (AnchorStyles.Top | AnchorStyles.Left))

如果您要检查多次,您可能需要为此实现一个方法。

public bool StyleHasOptions(AnchorStyles style, AnchorStyles options)
{
    return style & options == options;
}

//// Use it like this:
// if (StyleHasOptions(Sender.Anchor, AnchorStyles.Top | AnchorStyles.Left))
于 2013-02-18T16:08:15.837 回答
2

检查标志集通常是这样完成的:

if ((Sender.Anchor & Anchor.Styles.Top) == Anchor.Styles.Top)
    //do something
于 2013-02-18T16:09:09.977 回答