vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Re: DragDrop von einer Textbox in eine andere mit ContextMenu-Auswahl 
Autor: ewaldvb
Datum: 12.09.11 21:51

Danke, hat sich erledigt!

ich habs so gelöst:
(ist vielleicht nicht ganz elegant, aber funzt perfekt)

Habe an das Kontextmenü ein weiteres (letztes) MenuItem drangehängt.
Da kommt die Handle vom aktuellen (= sender) Control als String hinein und wird auf Visible=FALSE gesetzt.
Dann den ganzen Drag/Drop durchlaufen.
Und Jetzt kommts:
unter 4.1 weiss ich ja erst obs ein MOVE oder ein COPY (oder sonst was) war.
Genau hier kann ich jetzt mittels der Handle den Text des Quell-Control's löschen.

So sieht's aus:

' Auf Klassen-Ebene:
     Dim ConTxtMenuAs New ContextMenu
 
' Auf der Form müssen ein paar Textboxes plaziert sein, 
' und eine names "QuellTextBox".
' Einige der anderen Textboxes sollten AllowDrop=TRUE gesetzt haben.
 
 
' Beim Starten der Form, z.B. hier:
 
Private Sub Form1_Load(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles MyBase.Load
 
 
' Das Kontextmenü mit seinen Items muss für die ganze Klasse (Form) definiert 
' sein
        ConTxtMenu.MenuItems.Clear()
        ConTxtMenu.MenuItems.Add("Hierher Kopieren")
        ConTxtMenu.MenuItems.Add("Hierher Verschieben")
        ConTxtMenu.MenuItems.Add("Abbrechen")
     ' Das wird das (letzte) Item mit der Handle: 
        ConTxtMenu.MenuItems.Add("ObjectHandle")             
        ConTxtMenu.MenuItems.Item(ConTxtMenu.MenuItems.Count - 1).Visible = _
          False
 
' Die Event-Handler werden auch gleich zugewiesen; z.B:
        AddHandler ConTxtMenu.MenuItems.Item(0).Click, AddressOf _
          Me.ConTxtMenu_ItemClicked
        AddHandler ConTxtMenu.MenuItems.Item(1).Click, AddressOf _
        Me.ConTxtMenu_ItemClicked
        AddHandler ConTxtMenu.MenuItems.Item(2).Click, AddressOf _
        Me.ConTxtMenu_ItemClicked
 
' Den Controls die Drag/Drop-Handler zuweisen:
        For Each ctl As Control In Me.Controls
            If ctl.AllowDrop = True Then  ' Nur wenn auch AllowDrop gesetzt ist 
                AddHandler ctl.DragEnter, AddressOf Me.target_DragEnter
                AddHandler ctl.DragDrop, AddressOf Me.target_DragDrop
            End If
        Next
 
' ... Ende von Starten der Form
 
End Sub
 
 
' hier kommen jetzt die EventHandling's:
 
Private Sub QuellTextBox_MouseDown(ByVal sender As Object, _
            ByVal e As System.Windows.Forms.MouseEventArgs) _
            Handles QuellTextBox.MouseDown
  ' könnte ebenso auch dynamisch an ein Control gebunden sein
 
     ' ... div. Code
 
     ' Im letzten MenuItem steht als String die Handle des aktuellen Controls ( 
     ' QuellTextBox)
     ConTxtMenu.MenuItems.Item(ConTxtMenu.MenuItems.Count - 1).Text = _
          Convert.ToString(sender.Handle)
 
     ' Initialisiere und starte den Drag/Drop-Vorgang
     sender.DoDragDrop(sender.Text, DragDropEffects.Copy Or _
       DragDropEffects.Move)
 
     ' ... div. Code
 
End Sub
 
 
Private Sub target_DragEnter(ByVal sender As Object, _
            ByVal e As System.Windows.Forms.DragEventArgs)
            ' Dieser Handler wurde dynamisch der jeweiligen TextBox zugeordnet
 
     ' Die erlaubten Effect's übernehmen
     e.Effect = e.AllowedEffect
 
End Sub
 
 
Private Sub target_DragDrop(ByVal sender As Object, _
            ByVal e As System.Windows.Forms.DragEventArgs)   _
            ' Dieser Handler wurde dynamisch der jeweiligen TextBox zugeordnet
 
     ' ... div. Code
     ' Zeige das Kontextmenü an
     ConTxtMenu.Show(sender, New Point(20, 1))
 
     ' Jetzt den Text hier herein kopieren (könnte auch den Text aus dem 
     ' [Handle].Text nehmen)
     sender.Text = e.Data.GetData(DataFormats.Text)
 
     ' ... div. Code
 
End Sub
 
 
Private Sub ConTxtMenu_ItemClicked(ByVal sender As Object, ByVal e As _
  System.EventArgs)
            ' Dieser Handler wurde eingangs den MenuItems zugeordnet
 
 
' siehe "4.1" der obigen Schilderungen, bzw. der Problemstellung
 
 
     Dim mnuItem As MenuItem = sender
 
     ' Hier wird die Handle von String über Int64 wieder in einen IntPtr 
     ' zurückgewandelt
     Dim hndle As IntPtr = _
      New IntPtr(Convert.ToInt64(ConTxtMenu.MenuItems.Item( _
      ConTxtMenu.MenuItems.Count - 1).Text))
 
     If mnuItem.Index = 1 Then   ' das MenuItem(1); Verschieben? ...
         Control.FromHandle(hndle).Text = Nothing    ' ... und die QuellTextBox 
         ' ausleeren
     End If
 
End Sub
Sollte dennoch jemand die "elegante" Lösung parat haben, dann bitte melden.


Schönen Abend!
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
DragDrop von einer Textbox in eine andere mit ContextMen...1.822ewaldvb12.09.11 17:12
Re: DragDrop von einer Textbox in eine andere mit Cont...1.219ewaldvb12.09.11 21:51
Re: DragDrop von einer Textbox in eine andere mit ContextMen...1.221ModeratorFZelle12.09.11 23:26
Re: DragDrop von einer Textbox in eine andere mit ContextMen...1.199ewaldvb13.09.11 10:40

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel