사용자 컨트롤을 한 FlowLayoutPanel에서 다른 FlowLayoutPanel로 드래그합니다

StackOverflow https://stackoverflow.com/questions/766859

문제

2 FlowLayoutPanels에서 사용자 정의 USERCONTROL의 드래그 앤 드롭 기능을 추가하려면 어떻게해야합니까?

UserControl은 아래의 다음 코드 라인에서 계속 무효화됩니다.

    private void flowLayoutPanel1_DragDrop(object sender, DragEventArgs e)
    {
        UserControl userControl = e.Data.GetData(typeof(UserControl)) as UserControl;
도움이 되었습니까?

해결책

당신이하는 일의 문제는 드래그 내부에 저장된 데이터를 추출하려면 정확한 유형.

control.DoDragDrop(new Label(), DragDropEffects.Move);

e.Data.GetDataPresent(typeof(Control)) // = false
e.Data.GetDataPresent(typeof(Label)) // = true

당신이해야 할 일은 래퍼를 만들고 드래그 앤 드롭 코드에 사용하는 것입니다.

class ControlWrapper
{
  public Control Control { get; private set; }
  public ControlWrapper(Control control) { Control = control; }
}

control.DoDragDrop(new ControlWrapper(new Label()), DragDropEffects.Move);

e.Data.GetDataPresent(typeof(ControlWrapper)) // = true

그리고 이제 코드가됩니다

ControlWrapper controlWrapper = e.Data.GetData(typeof(ControlWrapper)) as ControlWrapper;
UserControl userControl = controlWrapper.Control as UserControl;

너무 설교하지 않으려 고 노력하지만 먼저 원하는 양식에 데이터가 있는지 확인해야합니다. e.Data.GetDataPresent(typeof(ControlWrapper)) 그 형식인지 알려줄 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top