ITransformProvider.Move(Double, Double) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
コントロールを移動します。
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
注釈
オブジェクトを移動、サイズ変更、または回転して、結果の画面の位置がコンテナーの座標の外に完全に存在し、キーボードまたはマウスにアクセスできないようにすることはできません。 たとえば、最上位レベルのウィンドウが画面から完全に移動された場合や、子オブジェクトがコンテナーのビューポートの境界の外に移動された場合などです。 このような場合、オブジェクトは要求された画面座標の近くに可能な限り配置され、上または左の座標がコンテナーの境界内に存在するようにオーバーライドされます。