実行時にコントロールを移動できるようにするために作成済みのヘルパーファイルで見つけた匿名のデリゲートイベントからサブスクライブを解除する方法を見つけるのに問題があります。これらのイベントの購読を解除したい理由は、コントロール(この場合はボタン)が再びロックされ、移動できなくなるためです。ヘルパークラスのメソッドは次のとおりです。
public static void Init(Control control)
{
Init(control, Direction.Any);
}
public static void Init(Control control, Direction direction)
{
Init(control, control, direction);
}
public static void Init(Control control, Control container, Direction direction)
{
bool Dragging = false;
Point DragStart = Point.Empty;
control.MouseDown += delegate(object sender, MouseEventArgs e)
{
Dragging = true;
DragStart = new Point(e.X, e.Y);
control.Capture = true;
};
control.MouseUp += delegate(object sender, MouseEventArgs e)
{
Dragging = false;
control.Capture = false;
};
control.MouseMove += delegate(object sender, MouseEventArgs e)
{
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);
}
};
}
メソッドを呼び出してこれらのイベントをサブスクライブする方法は次のとおりです。
ControlMover.Init(this.Controls["btn" + i]);
これらのイベントを保持するローカル変数を作成し、この方法でサブスクライブを解除することで、これらのサブスクライブを解除する方法について、MSDNでいくつか読んだことがありますが、自分のプロジェクトでこれを機能させることができないようです。これらのイベントの購読を解除して、コントロールが再び所定の位置に固定されるようにするにはどうすればよいですか?