런타임시 컨트롤의 이동을 허용하는 미리 만든 도우미 파일에서 발견 된 일부 익명의 대리자 이벤트의 구독을 취소하는 방법을 파악하는 데 문제가 있습니다. 이러한 이벤트를 구독 취소하려는 이유는 컨트롤 (이 경우 버튼)이 다시 잠기고 이동할 수 없기 때문입니다. 여기 헬퍼 클래스의 방법입니다 :익명 대리자 이벤트 구독 취소
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
원격으로 작업을 수행 할 수 없기 때문에이 파일을 제거했습니다. 나는 그것 위에서 약간 또는 더 한층의 작업을 시도하려고 노력할 것이다. 그러나 그것은 좋게 보이지 않고 있었다! –