我在解决一些匿名委托事件时存在一些麻烦,这些匿名委托事件是在预先创建的帮助文件中发现的,该文件有助于在运行时移动控件。我想取消订阅这些事件的原因是,控件(在本例中为按钮)将再次被锁定,无法移动。这里是辅助类的方法:退订匿名代理事件
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上的一些方法有关创建一个局部变量持有这些事件,然后通过这样的方式退订退订这些,但我似乎无法在我自己的项目得到这个工作。我该如何解除这些事件,以便我的控件再次固定到位?
你可以发布你的代码,在哪里存储他们在一个变量,并使用它来取消订阅? – CodesInChaos
但个人而言,我会为此使用命名方法。更简单,更清洁的代码IMO。 – CodesInChaos
我已经删除了这个,因为我什至不能远程工作。我会尝试检索一些或进一步的工作,但它看起来不太好! –