0

テーブル レイアウト パネルの UI を処理するプログラムの一部を作成しました。これはこれまでのところ機能していますが、実行時にフォームの周りでコントロール (追加した機能) を試す前に、セル内にあるため、コンテナーセルの外に移動できないことに気付きました。ただし、これは素晴らしく、まさに私が必要としていたものですが、コントロール(ボタンなど)が左側のセルとセルの上の境界に正しく含まれていることがわかりましたが、下と右の境界ではコントロールが許可されていますそれから消えます。デモ用のいくつかのスクリーンショットを次に示します。

ここに画像の説明を入力

ここでは、ボタン コントロールがセルの上と左の境界を超えて移動できないことがわかります。

ここに画像の説明を入力

ただし、ここでは、セルの下と右の境界を超えて移動できるようです。

コントロールの移動を許可する方法を振り返ってみると、以下に示すように、いくつかの変数を設定したセクションに出くわしました。

public static void MouseMove(object sender, MouseEventArgs e)
         {
             Control control = sender as Control;
             Control container = sender as Control;
             if (control != null)
             {
                 if (Dragging)
                 {
                     if (direction != Direction.Vertical)
                     {
                         container.Left = Math.Max(0, e.X + container.Left - DragStart.X);
                     }
                     if (direction != Direction.Horizontal)
                     {
                         container.Top = Math.Max(0, e.Y + container.Top - DragStart.Y);
                     }
                 }
             }
         }

ここでは、下と右のコンテナーの境界を設定していないことがわかりました。これは理にかなっていますが、インテリセンスを調べてみると、container.right と container.bottom を取得できないようです。次のツールチップが付属しているためです。

"gets the distance, in pixels, between the right edge of the control, and the left edge of it's container's client area"

コントロールの下部とコンテナー領域の上部に対してのみ、下部も同じことを行います。

このあたりにアウェイはありますか?おそらく、コントロールの下部をセルの下部境界に接続するオプションであり、右側も同じですか?

編集1:代わりに、衝突をより適切に処理するためにmousemoveイベントを変更する必要があるかもしれません.

4

1 に答える 1

1

Control.right は読み取り専用プロパティです。設定してみる

if (direction != Direction.Vertical)
{
    container.Left = Math.Max(0, e.X + container.Left - DragStart.X);
    container.Left = Math.Min(container.Left, container.Parent.Width - container.Width;
}
if (direction != Direction.Horizontal)
{
    container.Top = Math.Max(0, e.Y + container.Top - DragStart.Y);
    container.Top = Math.Min(container.Top, container.Parent.Height - container.Height;
}
于 2012-07-04T11:21:25.307 に答える