Wort was in einer Textbox bei Form2 drin ist, bei Form1 das Wort in einer Richsbox makiren

  • Allgemein

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Wort was in einer Textbox bei Form2 drin ist, bei Form1 das Wort in einer Richsbox makiren

    Hallo,

    ich habe eine Frage sie wäre: Wie kann von von einer z.B Form2 ein Wort nach Form1 Makieren? "Das Wort was Makiert werden soll steht in eine Textbox!"

    Ich habe versucht:



    If InStr(Form1.RichTextBox1.Text, TextBox1.Text) Then
    Form1.RichTextBox1.Select()
    Else
    MsgBox("Dein Wort ist nicht vorhanden", MsgBoxStyle.Critical, "Error")
    End If


    Aber es geht nicht.

    Ich hoffe einer kann mir helfen.

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

    Sei sicher, dass die Richtextbox ausgewählt (selektiert) ist, wenn die Bedingung wahr ist.

    Jedoch unterscheiden sich .Select() und .Selection voeinander:

    .Select fokussiert das Steuerelement lediglich. So gut wie jedes Steuerelement hat mwn diese Methoden.
    Wenn ich gerade .Focus() mit .Select() verwechseln sollte, empfehle ich dir wärmstens, dir mal (optionale) Parameter der .Select()-Methode anzuschauen.
    .Selection gibt des ausgewählten Text an, welchen du logischerweise auch selbst einsetzen kannst. Dazu einfach mal Google quälen... Hab ich auch gemacht, hab die Lösung nur schon längst wieder vergessen...

    Btw.: Ersetze InStr am besten mit z.B. RichTextBox1.Text.Contains(TextBox1.Text). Wenn du schon mit dem Datentypen String arbeitest, dann solltest du auch seine Vorzüge nutzen.

    MfG,
    X-Zat / Momo

    X-Zat schrieb:

    Sei sicher, dass die Richtextbox ausgewählt (selektiert) ist, wenn die Bedingung wahr ist.

    Jedoch unterscheiden sich .Select() und .Selection voeinander:

    .Select fokussiert das Steuerelement lediglich. So gut wie jedes Steuerelement hat mwn diese Methoden.
    Wenn ich gerade .Focus() mit .Select() verwechseln sollte, empfehle ich dir wärmstens, dir mal (optionale) Parameter der .Select()-Methode anzuschauen.
    .Selection gibt des ausgewählten Text an, welchen du logischerweise auch selbst einsetzen kannst. Dazu einfach mal Google quälen... Hab ich auch gemacht, hab die Lösung nur schon längst wieder vergessen...

    Btw.: Ersetze InStr am besten mit z.B. RichTextBox1.Text.Contains(TextBox1.Text). Wenn du schon mit dem Datentypen String arbeitest, dann solltest du auch seine Vorzüge nutzen.

    MfG,
    X-Zat / Momo

    X-Zat schrieb:

    Das geht nicht....
    ähm - findest du das sinnvoll, den vorherigen post komplett nochmal zu zitieren? und dann ein Zitat ohne quelle anzuhängen, was zitiert "das geht nicht"?
    Was geht nicht??

    Na, ich beschäftige michmal mit deiner Eingangsfrage:
    Der Denkfehler scheint, dass du nur überprüfst, ob das suchwort vorhanden ist, nicht aber, wo.

    Wo, das findet man mit String.IndexOf(suchtext).

    Wenn gefunden, kannste Richtextbox SelectionStart und .SelectionLength entsprechend setzen, und selektiert ist.
    Was nicht geht, ist dieser Zugriff von Form2 auf Form1.
    Wenn Du von Form1 aus Form2 erstellst, musst Du einen Verweis auf Form1 mitgeben, diesen in Form2 speichern und über diesen auf Form1 zugreifen:

    VB.NET-Quellcode

    1. ' in Form1
    2. Dim frm2 As New Form2(Me)
    3. ' ...
    4. Public Sub RUFE_EINE_FUNKTION_DIESES_NAMENS_AUF(Parameter As String) ' oder was Du benötigst
    5. ' hier Deinen Text selektieren
    6. End Sub
    7. '-------------------
    8. Class Form2
    9. Private _frm1 As Form1
    10. Public Sub New(frm1 As Form1)
    11. _frm1 = frm1
    12. End Sub
    13. ' ...
    14. _frm1.RUFE_EINE_FUNKTION_DIESES_NAMENS_AUF(Parameter)
    15. 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!
    Geht schon - er macht ja kein Threading, und deshalb funzt der VB-Trick.

    Deine Variante funzt auch ohne VB-Trick, aber führt zum Architektur-Problem "enge Kopplung".
    Dadurch, dass Form2 in frm1 hineingrabscht, kann Form2 nicht unabhängig von Form1 entwickelt werden.

    Ist bei eh hingeschmuddeltem code kein problem, aber sauber ist eben was anneres.

    bei einer sauberen Architektur würde Form2 ein Event schmeißen, Form1 würde das auffangen, und selbst die nötigen Veränderungen vornehmen. Gugge VeryBasics (@TE: übrigens zum "VB-Trick" auch dort guggn).
    Auf diese Weise braucht Form2 Form1 nicht zu kennen, kann ganz unabhängig davon entwickelt werden, weiß nicht einmal, was mit seinem Event passiert, wenn es es wirft.

    Und meißt ists nichtmal mehr Code, eben ein Event zu implementieren, und im OwnerForm dann den EventHandler, anstatt einen injizierenden Konstruktor zu basteln und eine OwnerForm-Variable zu halten.

    Hastes eiglich selbst mal ausprobiert?

    Wie gezeigt kannstes nämlich gar nicht bringen, da kommt die sehr richtige Warnung:

    Compiler schrieb:

    "Public Sub New(frm1 As Form1)" im vom Designer generierten Typ "WindowsApplication1.Form2" sollte die InitializeComponent-Methode aufrufen.