Announcement

Collapse
No announcement yet.

Drag and Drop + Inheritance

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Drag and Drop + Inheritance

    Hallo,

    Ich sitze hier gerade und weiss nicht mehr so recht weiter.

    Ich habe eine Diagram Komponente IODiagram und einen Node der sich im Diagram befindet - IONode. In dem IODiagram habe ich mir einen Drag and Drop Mechanismus eingebaut der wunderbar funktioniert.

    [highlight=c#]
    protected void dvInputOutput_MouseMove(object sender, MouseEventArgs e)
    {
    ...
    //Drag and Drop starten
    DragDropEffects dropEffect = dvInputOutput.DoDragDrop(_nodeFromMouseDown, DragDropEffects.Move);
    ...
    }

    protected void dvInputOutput_DragOver(object sender, DragEventArgs e)
    {
    e.Effect = DragDropEffects.None;

    IONode airNode = e.Data.GetData(typeof(IONode))as IONode;

    //Checken ob Node gedroppt werden kann
    if (airNode != null)
    {
    ...
    }

    protected void dvInputOutput_DragDrop(object sender, DragEventArgs e)
    {
    IONode airNode = e.Data.GetData(typeof(IONode)) as IONode;

    //Node droppen
    if (airNode != null)
    {
    ...
    }
    [/highlight]

    Danach habe ich eine konkrete Klasse für mein Programm von IODiagram abgeleitet - IODiagramPresenter. Selbiges von IONode - IONodePresenter.

    Ich habe an dem DragAndDrop Mechanismus nichts verändert, allerdings funktionert schon das DragOver Event nicht mehr richtig. Es wird ausgelöst, allerdings wird hier

    [highlight=c#]
    protected void dvInputOutput_DragOver(object sender, DragEventArgs e)
    {
    e.Effect = DragDropEffects.None;

    IONode airNode = e.Data.GetData(typeof(IONode))as IONode;
    ...
    }
    [/highlight]

    kein Node zurückgegeben. Ich kann mir auch vorstellen dass es daran liegt, dass der Typ der in dem DataObject referenziert wird kein IONode, sondern IONodePresenter ist.

    Jemand schon Erfahrungen auf dem Gebiet oder einen kleinen Tip?

    Wäre sehr dankbar!

    MfG
    Florian

  • #2
    Ich kann mir auch vorstellen dass es daran liegt, dass der Typ der in dem DataObject referenziert wird kein IONode, sondern IONodePresenter ist.
    Das wird es sein. Habe gerade mal einen Blick in den Source der DragEventArgs geworfen und da sieht man das die GetData Überladung die du mit dem Typ aufrufst intern sich nur den Namen des Typs raus holt und dann nur noch mit dem Namen als String weiterarbeitet. Über den reinen Typnamen hat man natürlich keine Info mehr über die Vererbungshierarchie und kann die somit auch nicht berücksichtigen.

    Comment


    • #3
      Ok... ich hab jetzt den Node vor dem Drag in eine Wrapperklasse eingepackt und die ist ja immer dieselbe und die findet er jetzt auch. Schöne ist es nicht wirklich, aber es funtioniert

      [highlight=c#]
      // Start Drag and Drop
      IONodeDragDropWrapper wrapper = new IONodeDragDropWrapper(_nodeFromMouseDown);
      DragDropEffects dropEffect = dvInputOutput.DoDragDrop(wrapper, DragDropEffects.Move);
      [/highlight]

      [highlight=c#]
      //Get drag and drop item
      IONodeDragDropWrapper airWrapper = e.Data.GetData(typeof(IONodeDragDropWrapper)) as IONodeDragDropWrapper;
      IONode airNode = airWrapper.IONode;
      [/highlight]

      Comment

      Working...
      X