Benutzer mit den meisten Antworten
Suchen & Ersetzen Dialog in RichTextBox

Frage
-
Hallo,
ich habe mich schon durch einige Foren geschlagen aber nirgends kann mir jemand erklären wie ich Dialog erstelle um in einer RichTextBox Wörter zu finden oder diese zu ersetzen wie in den ReplaceDialog.
Vielleicht kann mir hier jemand erklären wie ich das schreiben muss.
LG
Ryan
Antworten
-
Hallo Ryan,
den Dialog zum Suchen und Ersetzen musst/kannst Du selber erstellen. Die RichTextBox stellt hier keinen standardmäßigen Dialog zur Verfügung. Die eigentliche Suchlogik ist dabei auch nicht so schwer zu implementieren. Ich habe ein Beispielprojekt als Download zur Verfügung gestellt, das solch einen einfachen Dialog implementiert:
http://download.vb-faq.de/samples/findandreplacedialog.zip
Lässt sich von den Optionen sicher noch weiter ausbauen, wie man es gerade braucht.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert Ryan Shasta Samstag, 18. Juni 2011 16:02
-
Hallo Ryan,
Zunächst benötigst Du ein Forms Projekt. Das benötigt eine Richtextbox und ein Button zum Starten des Dialogs.
Dann musst Du dem Projekt eine neue Komponente hinzufügen: Dialogfeld. Es entsteht eine Dialog1.vb. Darin fügst Du einen Button und zwei Textboxen ein.
Das Programm geht dann wie folgt. Richtextbox mit Text füllen (von Hand z.B.) und Button1 betätigen zum Starten des Dialogs. Im Dialog Textbox1 und 2 füllen mit dem zu suchenden und zu ersetzenden String. Da auch wieder Button1 betätigen. Und dann OK Button.
Viel Erfolg und Grüsse Ellen
Diesen Code kopierst Du in die Code Fenster:
Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim dlg As New Dialog1 dlg.s = RichTextBox1.Text If dlg.ShowDialog = DialogResult.OK Then RichTextBox1.Text = dlg.s End If dlg.Close() End Sub End Class Imports System.Windows.Forms Public Class Dialog1 Private rtbText As String Public Property s() As String Get Return Me.rtbText End Get Set(ByVal value As String) Me.rtbText = value End Set End Property Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click Me.DialogResult = System.Windows.Forms.DialogResult.OK End Sub Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click Me.DialogResult = System.Windows.Forms.DialogResult.Cancel End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click rtbText = rtbText.Replace(TextBox1.Text, TextBox2.Text) End Sub End Class
Ich benutze/ I'm using VB2008 & VB2010- Als Antwort markiert Ryan Shasta Samstag, 18. Juni 2011 16:02
- Bearbeitet Ellen Ramcke Samstag, 18. Juni 2011 20:26 Tippfehler
Alle Antworten
-
Hallo Ryan,
Zunächst benötigst Du ein Forms Projekt. Das benötigt eine Richtextbox und ein Button zum Starten des Dialogs.
Dann musst Du dem Projekt eine neue Komponente hinzufügen: Dialogfeld. Es entsteht eine Dialog1.vb. Darin fügst Du einen Button und zwei Textboxen ein.
Das Programm geht dann wie folgt. Richtextbox mit Text füllen (von Hand z.B.) und Button1 betätigen zum Starten des Dialogs. Im Dialog Textbox1 und 2 füllen mit dem zu suchenden und zu ersetzenden String. Da auch wieder Button1 betätigen. Und dann OK Button.
Viel Erfolg und Grüsse Ellen
Diesen Code kopierst Du in die Code Fenster:
Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim dlg As New Dialog1 dlg.s = RichTextBox1.Text If dlg.ShowDialog = DialogResult.OK Then RichTextBox1.Text = dlg.s End If dlg.Close() End Sub End Class Imports System.Windows.Forms Public Class Dialog1 Private rtbText As String Public Property s() As String Get Return Me.rtbText End Get Set(ByVal value As String) Me.rtbText = value End Set End Property Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click Me.DialogResult = System.Windows.Forms.DialogResult.OK End Sub Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click Me.DialogResult = System.Windows.Forms.DialogResult.Cancel End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click rtbText = rtbText.Replace(TextBox1.Text, TextBox2.Text) End Sub End Class
Ich benutze/ I'm using VB2008 & VB2010- Als Antwort markiert Ryan Shasta Samstag, 18. Juni 2011 16:02
- Bearbeitet Ellen Ramcke Samstag, 18. Juni 2011 20:26 Tippfehler
-
Hallo Ryan,
den Dialog zum Suchen und Ersetzen musst/kannst Du selber erstellen. Die RichTextBox stellt hier keinen standardmäßigen Dialog zur Verfügung. Die eigentliche Suchlogik ist dabei auch nicht so schwer zu implementieren. Ich habe ein Beispielprojekt als Download zur Verfügung gestellt, das solch einen einfachen Dialog implementiert:
http://download.vb-faq.de/samples/findandreplacedialog.zip
Lässt sich von den Optionen sicher noch weiter ausbauen, wie man es gerade braucht.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert Ryan Shasta Samstag, 18. Juni 2011 16:02
-
Hallo,
ich hatte es mal so komplett eingebunden und die Form angepasst, das Fenster wird auch aufgerufen Problem ist das bei den gesucht Wörtern kommt das er es nicht gefunden hat obwohl diese im Text drin stehen?
Ich hab den findreplaceDialog meinen Projekt hinzugefügt, aus der Form1 haben ich den Quellcode in meine Form eingefügt den Aufruf Toolstripbutton in den Namen umgenannt wie es in der Form1 benannt ist und den Aufrufcode eingefügt.
Habe ich da irgendetwas vergessen?
LG
Ryan
-
Hallo Ryan,
wenn Du den Text in die (Rich)TextBox eingefügt oder eingegeben hast, steht die Einfügemarke am Ende des Textes. Die Suche ist in diesem Beispiel so implementiert, dass von der aktuellen Position Vorwärts gesucht wird. Ein "Reset" an den Anfang muss manuell erfolgen.
[Nachtrag] Ich habe das Beispiel aktualisiert, so dass die Suche am Anfang des Textes beginnt, wenn die Auswahl am Ende des Textes steht oder die Suche einmal durchgelaufen ist:
http://download.vb-faq.de/samples/findandreplacedialog.zip
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Bearbeitet Thorsten DörflerModerator Sonntag, 19. Juni 2011 09:55 Nachtrag
-
Hallo Thorsten,
ich wollte lieber nix sagen. Bei mir hat Dein Sample auch nicht funktioniert, lpos lieferte immer den Wert -1 zurück.
Ansonsten möchte ich sagen, dass Deine Lösung die intelligentere ist. Du gibst den Verweis der Instanz in den Dialog, während ich die .Text Eigenschaft jedes mal in den Dialog hinhein schreibe und heraus kopiere. Das dürfte bei Textlängen >1Mb schön zu merklichen Laufzeiten führen.
Das habe ich mir gemerkt.
Schöne Grüsse Ellen
Ich benutze/ I'm using VB2008 & VB2010 -
Hallo Ellen,
wenn etwas nicht funktioniert, darfst Du dies ruhig sagen. Ich kann das Beispiel nur verbessern, wenn mir die Probleme damit bekannt sind. Funktioniert denn die überarbeitete Fassung davon jetzt?
Zum Lösungsansatz selber, dachte ich hierbei weniger an die Speicherauslastung, wobei dies auch ein Aspekt ist, vielmehr darum vorhandene Formatierungen der RichTextBox zu erhalten. Liest man den Text aus der Text Eigenschaft aus und weist ihn dort wieder zu, gehen sämtliche Formatierungen verloren. Über SelectedText bleibt diese soweit möglich erhalten. Als Beispiel habe ich mich hier an Notepad bzw. WordPad orientiert
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de -
Hallo Thorsten,
habe getestet. Läuft jetzt. Dieses Beispiel nehme ich dann in meine Code Sammlung auf, die mittlerweile schon sehr umfangreich ist.
Vielen Dank. Ach so, Deine Lösung gehört nach oben. Das mache ich denn mal.
schöne Grüsse Ellen
Ich benutze/ I'm using VB2008 & VB2010 -
Hallo
ich habe das jetzt auch getestet, was ich merkwürdig finde, wenn ich Suchen anklicke passiert gar nichts tippe ich ein Wort zum ersetzen ein, passiert bei Suchen wieder nichts bei Ersetzen kommt dann eine Meldung das gesuchte Wort nicht gefunden. Bestätige ich die Meldung ersetzt er dann das gesuchte Wort und schließt den Dialog.
Ich habe das nur hinzugefügt, den Code aus Form1 in meine Form übernommen und das Clickereigniss erstellt.
LG
Ryan
-
Hallo Ryan,
dass "nichts" passiert mag daran liegen, dass Du die HideSelection Eigenschaft der (Rich)TextBox auf True stehen hast (Standardeinstellung). Dann wird keine Markierung angezeigt, solange der Ersetzen Dialog den Fokus hat. Der Ablauf beim Ersetzen ist folgender:
1. Klick auf Ersetzen: Suche nach dem gewünschten Wort
2. Klick: Ersetze das gesuchte, markierte Wort und suche nächstes => Wird kein weiteres gefunden: Meldung "'xy' konnte nicht gefunden werden."
Ist verbesserungswürdig, genau wie der Fehler, der noch enthalten war. Es wird immer das markierte Wort ersetzt:
If Me.TextBox.SelectionLength = 0 OrElse _ String.Compare(Me.TextBox.SelectedText, term, ignoreCase) <> 0 Then
Siehe => V 0.3 http://download.vb-faq.de/samples/findandreplacedialog.zip
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de