Wort in Textbox suchen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von Visual_Prog.

    Hiermit kannste die Position im String ausmachen:
    msdn.microsoft.com/de-de/library/k8b1470s(v=vs.110).aspx

    Und hiermit markieren:
    msdn.microsoft.com/de-de/library/hk09zy8f(v=vs.110).aspx

    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    @Visual_Prog Wenn du damit nicht klar kommst habe ich eine Funktion die dir den gesuchten Text in einer Richtextbox markiert(Gelb und kursiv anzeigt).

    Aufruf wäre dann nur

    marktext(Richtextbox1,Textbox1)

    Richtig markieren geht nämlich nur in einer RTB.
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~
    will erstmal den inxex ausifindig machen aber der sagt immer ganz krumer zahlen die nicht sein koennen:

    VB.NET-Quellcode

    1. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    2. Dim Wort2 As String
    3. Wort2 = InputBox("Wort Suchen", "Wort bitte eingeben")
    4. For Each line As String In Textbox1.Lines
    5. If line.Contains(Wort2) Then
    6. MsgBox(line.IndexOf(Wort2))
    7. End If
    8. Next
    9. End Sub

    @Visual_Prog Was sind denn ganz dumme Zahlen? Und wie genau sieht der Inhalt deiner Textbox aus?

    Bei dem Text "was geht" bekommst du bei der Suche nach "geht" die Zahl "4" zurück.

    VB.NET-Quellcode

    1. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    2. Dim wort2 As String = InputBox("Wort suchen", "Wort bitte eingeben")
    3. For Each lin As String In TextBox1.Lines
    4. If lin.Contains(wort2) Then
    5. MsgBox(lin.IndexOf(wort2))
    6. End If
    7. Next
    8. End Sub


    Text in meiner Textbox: Was geht
    InputBox eingabe: geht

    Geliefert wird mir die Zahl 4. Das ist der Index von dem gesuchten Wort. Bzw der Index an dem das gesuchte Wort beginnt.

    Bei "was geht" hat w ja die Position 0. also hat g die Position 4.
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „razzzer530i“ ()

    Visual_Prog schrieb:

    womit ich die ZEILE finden kann...
    (Rich)TextBoxen haben eine Property .Lines, deren Inhalt müsstest Du durchsuchen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Visual_Prog Sorry, offenbar habe ich Dein Problem falsch verstanden.
    Kannst Du das bitte noch mal aus jetziger Sicht schildern?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Okay ja ich hab mir leider noch nichts eingefallen.

    Ja also ich habe eine textbox.
    Von dieser Textbox soll ein Wort gesucht werden.
    Dann soll das halt am besten markiert werden oder wenn es nicht geht irgendwie kenntlich gemacht werden (Zeilennummer oder Selectionstart...)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Visual_Prog“ ()

    @Visual_Prog Meinst Du so was:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim lastPos As Integer = 0
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. Dim txt = "123456789" & Environment.NewLine
    5. txt &= "123456789" & Environment.NewLine
    6. txt &= "123456789" & Environment.NewLine
    7. txt &= "123456789" & Environment.NewLine
    8. RichTextBox1.Text = txt
    9. End Sub
    10. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    11. Dim pos = RichTextBox1.Text.IndexOf("234", lastPos)
    12. If pos >= 0 Then
    13. RichTextBox1.Select(pos, 3)
    14. lastPos = pos + 1
    15. RichTextBox1.HideSelection = False
    16. Else
    17. lastPos = 0
    18. End If
    19. Label1.Text = lastPos.ToString
    20. End Sub
    21. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Visual_Prog schrieb:

    ich suche was womit ich die ZEILE finden kann...


    Möglichkeit 1

    VB.NET-Quellcode

    1. Dim iLineIndex As Integer = textBox1.Lines.ToList().FindIndex(Function(x) x.Contains(wort2))


    Möglichkeit 2

    VB.NET-Quellcode

    1. For i As Integer = 0 To textBox1.Lines.Length - 1
    2. If textBox1.Lines(i).Contains(wort2) Then
    3. MessageBox.Show(i.ToString())
    4. End If
    5. Next
    Kann ich den Text irgendwie ab einem bestimmten Index selecten oder direkt kenntlich machen?
    Bist jetzt habe ich die Messagebox, aber da ist das Zeilen-Zaehlen auf Dauer zu langsam im Vergleich dazu :)

    VB.NET-Quellcode

    1. Dim Wort2 As String = InputBox("Wort in der Textbos suchen: ", "Hier bitte das Wort eingeben: ", Wort2)
    2. For i As Integer = 0 To Textbox1.Lines.Length - 1
    3. If Textbox1.Lines(i).Contains(Wort2) Then
    4. MessageBox.Show("Textbox1", i.ToString())
    5. End If
    6. Next

    Kann man was machen wenn die Textox unterschiedlich formatiert ist als die Original-Txt?

    Mit wir immer die Zeile angezeit der Original-Txt, woeder Text sich in die Breite zieht. In der Textbox ist das natuerlich nicht so, da sind die Zeilen knapper. Somit wird dann ein Wert ausgegeben, der nicht der Zeile in der Textbox entspricht.

    Visual_Prog schrieb:

    Kann ich den Text irgendwie ab einem bestimmten Index selecten
    Genau dafür hast Du mir in Post #11 ein Hilfreich gegeben. ;)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Beschreibe dein Problem bitte noch einmal.
    Was meinst du genau?


    Ja also ich will ja die Textzeile eines Wortes von einem Text in einer Textbox ermitteln. Die Ursprungs-txt-Datei, die in diese Textbox geladen wird, ist von den Zeilen her anders formatiert. Wenn man die Txt-Datei alleine oeffnet, sieht man, dass der Text in sehr lange Zeilen geschrieben ist.
    Im Gegenteil dazu ist der Text, wenn er in der Textbox geladen wird, natuerlich nicht mit so langen Zeilen geschrieben, weil da ja gar nicht so viel Platz ist.
    Wenn ich dann die Zeile abrufen moechte, wird die Zeile, wo das Wort enthalten ist, in der Ursprungs-Txt gesucht und angeziegt und nicht im geladenen Text der Textbox. Somit kann man halt nicht die Zeile des Wortes in der Textbox sehen, sondern von der Urprungs -txt.
    @Visual_Prog Meinst Du so was (Form mit Button, CheckBox, Multiline-TextBox):

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. Using dlg = New OpenFileDialog
    4. If dlg.ShowDialog <> Windows.Forms.DialogResult.OK Then
    5. Return
    6. End If
    7. Me.TextBox1.Text = IO.File.ReadAllText(dlg.FileName)
    8. End Using
    9. End Sub
    10. Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
    11. Me.TextBox1.WordWrap = Me.CheckBox1.Checked ' das hier mal probieren
    12. End Sub
    13. End Class
    Welche Zeilen davon meinst Du?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich glaube, er meint so etwas (siehe Testprojekt)
    Aber das funktioniert nur bei .WordWrap = False weil die .lines-Auflistung bei aktiver WordWrap-Eigenschaft da nicht mitzieht...
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click
    2. mySearchText = tbxSearch.Text
    3. If String.IsNullOrWhiteSpace(mySearchText) Then Return
    4. Dim lineFound = getFoundLine()
    5. tbxText.HideSelection = (lineFound = -1)
    6. lblFoundText.Text = If(lineFound > -1, String.Format("Fund in Zeile {0}...", (lineFound + 1).ToString), "leider nichts gefunden...")
    7. If lineFound = -1 Then Return
    8. tbxText.SelectionStart = tbxText.Text.IndexOf(mySearchText)
    9. tbxText.SelectionLength = mySearchText.Length
    10. End Sub
    11. Private Function getFoundLine() As Integer
    12. For lineIndex As Integer = 0 To tbxText.Lines.Count - 1
    13. If tbxText.Lines(lineIndex).IndexOf(mySearchText) > -1 Then Return lineIndex
    14. Next
    15. Return -1
    16. End Function

    Dateien

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VB1963“ ()