次の方法で共有


ITransformProvider.Move(Double, Double) メソッド

定義

コントロールを移動します。

public:
 void Move(double x, double y);
public void Move (double x, double y);
abstract member Move : double * double -> unit
Public Sub Move (x As Double, y As Double)

パラメーター

x
Double

コントロールの左側の絶対画面座標。

y
Double

コントロールの上部の絶対画面座標。

例外

CanMove プロパティが false の場合。

次の例は、移動可能なカスタム コントロールに対するこのメソッドの 1 つの実装を示しています。

/// <summary>
/// Moves the provider to the specified position.
/// </summary>
/// <param name="x">The specified X screen coordinate.</param>
/// <param name="y">The specified Y screen coordinate</param>
void ITransformProvider.Move(double x, double y)
{
    int leftInt = (int)x;
    int topInt = (int)y;

    if (!((ITransformProvider)this).CanMove)
        throw new InvalidOperationException(
            "Operation cannot be performed.");

    // Move should never be allowed to place a control outside the 
    // bounds of its container; the control should always be accessible 
    // using the keyboard or mouse.
    // Use the bounds of the parent window to limit the placement 
    // of the custom control.
    int maxLeft = 10;
    int maxTop = 10;
    int maxRight =
        this.customControl.formWidth - this.customControl.Width - 10;
    int maxBottom =
        this.customControl.formHeight - this.customControl.Height - 10;

    if (leftInt < maxLeft)
        leftInt = 0;
    if (topInt < maxTop)
        topInt = 0;
    if (leftInt > maxRight)
        leftInt = maxRight;
    if (topInt > maxBottom)
        topInt = maxBottom;

    // Invoke control method on separate thread to avoid clashing with UI.
    // Use anonymous method for simplicity.
    this.customControl.Invoke(new MethodInvoker(delegate ()
    {
        this.customControl.Left = leftInt;
        this.customControl.Top = topInt;
    }));
}
''' <summary>
''' Moves the provider to the specified position.
''' </summary>
''' <param name="x">The specified X screen coordinate.</param>
''' <param name="y">The specified Y screen coordinate</param>
Private Sub Move(ByVal x As Double, ByVal y As Double) Implements ITransformProvider.Move
    Dim leftInt As Integer = CInt(x)
    Dim topInt As Integer = CInt(y)

    If Not(CType(Me, ITransformProvider)).CanMove Then
        Throw New InvalidOperationException("Operation cannot be performed.")
    End If

    ' Move should never be allowed to place a control outside the 
    ' bounds of its container; the control should always be accessible 
    ' using the keyboard or mouse.
    ' Use the bounds of the parent window to limit the placement 
    ' of the custom control.
    Dim maxLeft As Integer = 10
    Dim maxTop As Integer = 10
    Dim maxRight As Integer = Me.customControl.formWidth - Me.customControl.Width - 10
    Dim maxBottom As Integer = Me.customControl.formHeight - Me.customControl.Height - 10

    If leftInt < maxLeft Then
        leftInt = 0
    End If
    If topInt < maxTop Then
        topInt = 0
    End If
    If leftInt > maxRight Then
        leftInt = maxRight
    End If
    If topInt > maxBottom Then
        topInt = maxBottom
    End If

    ' Invoke control method on separate thread to avoid clashing with UI.
    ' Use anonymous method for simplicity.
    Me.customControl.Invoke(New MethodInvoker(Sub()
        Me.customControl.Left = leftInt
        Me.customControl.Top = topInt
    End Sub))
End Sub

注釈

オブジェクトを移動、サイズ変更、または回転して、結果の画面の位置がコンテナーの座標の外に完全に存在し、キーボードまたはマウスにアクセスできないようにすることはできません。 たとえば、最上位レベルのウィンドウが画面から完全に移動された場合や、子オブジェクトがコンテナーのビューポートの境界の外に移動された場合などです。 このような場合、オブジェクトは要求された画面座標の近くに可能な限り配置され、上または左の座標がコンテナーの境界内に存在するようにオーバーライドされます。

適用対象

こちらもご覧ください