1

コントロールのアンカー プロパティの値を確認するにはどうすればよいですか?

コード開発者がデザイナーでアンカー値を設定できるコントロールがあるとします。C# コードで、特定のアンカー値がコントロールに設定されているかどうかを確認するにはどうすればよいですか?

たとえば、以下の Sender コントロールには、開発者がこのコントロールに対して設定した上、左、および右のアンカーがあるとします。トップアンカーが設定されていることを確認する 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 に答える