Wie kann ich in VB.NET 2003 markierten Text in einer RTF-Box per Maus verschieben?

Antwort

Um in VB.NET 2003 markierten Text innerhalb einer RichTextBox per Drag & Drop mit der Maus zu verschieben, musst du einige Ereignisse und Einstellungen nutzen, da die Standard-RichTextBox dieses Verhalten nicht automatisch unterstützt. Hier ist eine Schritt-für-Schritt-Anleitung: **1. RichTextBox-Eigenschaften setzen:** - `AllowDrop` auf `True` setzen. **2. Ereignisse programmieren:** Du benötigst mindestens die folgenden Ereignisse: - `MouseDown` - `MouseMove` - `DragEnter` - `DragDrop` **3. Beispielcode:** ```vb.net ' Modul-Variablen Private isDragging As Boolean = False Private dragStart As Integer ' MouseDown: Startpunkt merken Private Sub RichTextBox1_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles RichTextBox1.MouseDown If e.Button = MouseButtons.Left AndAlso RichTextBox1.SelectionLength > 0 Then dragStart = RichTextBox1.GetCharIndexFromPosition(New Point(e.X, e.Y)) isDragging = True Else isDragging = False End If End Sub ' MouseMove: Drag starten Private Sub RichTextBox1_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles RichTextBox1.MouseMove If isDragging AndAlso e.Button = MouseButtons.Left Then If RichTextBox1.SelectionLength > 0 Then RichTextBox1.DoDragDrop(RichTextBox1.SelectedRtf, DragDropEffects.Move) isDragging = False End If End If End Sub ' DragEnter: Effekt anzeigen Private Sub RichTextBox1_DragEnter(ByVal sender As Object, ByVal e As DragEventArgs) Handles RichTextBox1.DragEnter If e.Data.GetDataPresent(DataFormats.Rtf) Then e.Effect = DragDropEffects.Move Else e.Effect = DragDropEffects.None End If End Sub ' DragDrop: Text verschieben Private Sub RichTextBox1_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs) Handles RichTextBox1.DragDrop Dim dropPoint As Point = RichTextBox1.PointToClient(New Point(e.X, e.Y)) Dim dropIndex As Integer = RichTextBox1.GetCharIndexFromPosition(dropPoint) ' Text entfernen und an neuer Stelle einfügen Dim selectedRtf As String = RichTextBox1.SelectedRtf Dim selectionStart As Integer = RichTextBox1.SelectionStart Dim selectionLength As Integer = RichTextBox1.SelectionLength ' Nur verschieben, wenn nicht in sich selbst gezogen If dropIndex < selectionStart OrElse dropIndex > selectionStart + selectionLength Then RichTextBox1.SelectedRtf = "" RichTextBox1.SelectionStart = dropIndex RichTextBox1.SelectedRtf = selectedRtf End If End Sub ``` **Hinweise:** - Der Code verschiebt den markierten Text an die neue Position. - Es wird geprüft, dass der Text nicht in sich selbst verschoben wird. - Die Formatierung bleibt erhalten, da mit `SelectedRtf` gearbeitet wird. **Weitere Infos:** - [Microsoft Dokumentation zu RichTextBox](https://learn.microsoft.com/de-de/dotnet/api/system.windows.forms.richtextbox?view=netframework-1.1) Damit kannst du markierten Text per Drag & Drop innerhalb einer RichTextBox verschieben.

KI fragen

Verwandte Fragen

Wie kopiere ich in VB.NET 2003 farbigen Text einer RTF-Box ins Clipboard, sodass die Zeilenumbrüche nach dem Einfügen ins Notepad korrekt angezeigt werden?

Um farbigen Text aus einer RichTextBox in VB.NET 2003 so ins Clipboard zu kopieren, dass die Zeilenumbrüche beim Einfügen in Notepad korrekt angezeigt werden, solltest du den **PlainText** (... [mehr]

Kann man in VB.NET 2003 Zeilenumbrüche, die durch RightMargin in einer RTF-Box erzeugt wurden, in echte Zeilenumbrüche umwandeln?

In VB.NET 2003 (und generell in Windows Forms) ist es so, dass der `RightMargin`-Wert einer RichTextBox lediglich die Anzeige beeinflusst: Der Text wird optisch umgebrochen, aber im zugrundeliegenden... [mehr]

Wie kann ich in VB.NET 2003 die aktuelle Kalenderwoche ermitteln?

In VB.NET 2003 kannst du die aktuelle Kalenderwoche mit der Klasse `System.Globalization.CultureInfo` und deren `Calendar`-Eigenschaft ermitteln. Hier ein Beispiel, wie du die aktuelle Woche nach ISO-... [mehr]

Warum zeigt Notepad beim Einfügen von clipboard.settext(rtf.Text) in VB.NET 2003 Quadrate statt richtiger Zeilenumbrüche?

Das Problem liegt sehr wahrscheinlich an den Zeilenumbrüchen im RTF-Text. Notepad erwartet für Zeilenumbrüche das Windows-Format `CRLF` (Carriage Return + Line Feed, also `vbCrLf` oder... [mehr]

Wie verhindere ich in VB.NET 2003, dass die Enter-Taste in einer RichTextBox einen Zeilenumbruch einfügt?

Um in VB.NET 2003 zu verhindern, dass das Drücken der Enter-Taste (`Return`) in einer `RichTextBox` einen Zeilenumbruch einfügt, kannst du das `KeyDown`- oder `KeyPress`-Ereignis der RichTex... [mehr]

Wie kann ich in VB.NET 2003 eine Liste aller JPG-Dateien aus sämtlichen Unterordnern des Ordners MainOrdner erstellen?

Um in VB.NET 2003 eine Liste aller JPG-Dateien in einem Ordner und allen Unterordnern zu erstellen, kannst du die rekursive Durchsuchung mit der Klasse `Directory` und `DirectoryInfo` verwenden. Hier... [mehr]

Wie kann ich in VB.NET ein JPG-Bild beim Umwandeln in ein GIF-Bild gleichzeitig verkleinern oder vergrößern?

Um in VB.NET ein JPG-Bild in ein GIF-Bild umzuwandeln und dabei gleichzeitig die Größe zu ändern, kannst du die Klassen `System.Drawing.Image` und `System.Drawing.Bitmap` verwenden. Hi... [mehr]

Wie kann ich in VB.NET 2003 ein JPG-Bild in ein GIF-Bild umwandeln?

In VB.NET 2003 kannst du ein JPG-Bild in ein GIF-Bild umwandeln, indem du die Klassen aus dem Namespace `System.Drawing` verwendest. Hier ein einfaches Beispiel, wie das funktioniert: ```vb.net Impor... [mehr]

Kann ich in VB.NET 2003 mit Val("ABC02") den im String enthaltenen Zahlenwert "2" extrahieren?

Mit der Funktion `Val("ABC02")` in VB.NET 2003 erhältst du als Ergebnis den Wert `0`. Die Funktion `Val` liest nur so lange Zeichen aus dem String, wie sie als Zahl interpretiert werden... [mehr]

Wie kann ich in VB.NET 2003 eine Zeile in einer RTF-Box bei Enter-Taste automatisch vor dem Zeilenvorschub mit "°" beenden?

Um in VB.NET 2003 in einer RichTextBox beim Drücken der Enter-Taste vor dem Zeilenvorschub automatisch ein "°" einzufügen, kannst du das KeyDown- oder KeyPress-Ereignis der Ric... [mehr]