Abfragen ob Text selected ist

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von NoNameCoding.

    Abfragen ob Text selected ist

    Hallo Community,

    Ich befasse mich erst seit kurzem mit VB und das hier ist mein erster Beitrag.
    Für den Eigengebrauch möchte ich mir einen kleinen Webbrowser mit VB Und WForms programmieren.
    Wie man es von Browsern wie Firefox oder Chrome kennt, wird der Link, wenn man ihn in der Textbox anklickt markiert. Dies habe ich mit diesem kleinen Code schon geschafft.

    VB.NET-Quellcode

    1. Private Sub TextBox1_Click(sender As Object, e As System.EventArgs) Handles TextBox1.Click
    2. TextBox1.Select(0, TextBox1.Text.Length)
    3. End Sub


    Nun möchte ich, das es wie in den eben genannten Browsern, bei einem weiteren Click nicht mehr markiert wird.
    Ich bedanke mich für jede Hilfe, das ich mich wirklich nicht gut auskenne

    MFG NNC

    *Topic verschoben, Label und BBCode auf .NET geändert*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Kleiner Denkfehler von mir :D
    Habs jetzt endlich hinbekommen

    Visual Basic-Quellcode

    1. Private selectText As Boolean = false
    2. Private Sub TextBox1_Enter1() Handles TextBox1.Enter
    3. TextBox1.SelectAll()
    4. End Sub
    5. Private Sub TextBox1_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Leave
    6. selectText = False
    7. End Sub
    8. Private Sub TextBox1_MouseUp() Handles TextBox1.MouseUp
    9. If selectText = False Then
    10. TextBox1.SelectAll()
    11. selectText = True
    12. Else
    13. Exit Sub
    14. End If
    15. End Sub
    Hi
    Vorsicht: Auch wenn das mit TextBox1_Enter1 ohne Parameter in VB klappt, ist es unsauber, ebenso bei TextBox1_MouseUp. Beide sind prinzipiell ähnlich geformt, wie TextBox1_Leave (d.h. sie haben eine ähnliche Signatur). Beide besitzen einen Paramter sender, der das Objekt angibt, von dem aus das Ereignis (Handles <Objekt>.<Ereignis>) ausgelöst wurde sowie eine von System.EventArgs erbende Klasse, die weitere Informationen über das aufgetretene Ereignis angibt. Im Falle von TextBox1.MouseUp wäre das MouseEventArgs, bei TextBox1.Enter EventArgs selbst.

    Eventuell kannst du selectText auch durch die Eigenschaft Focused der TextBox ersetzen.

    Noch ein paar Anmerkungen zum Stil:
    - Benenne unbedingt die Steuerelemente sinnvoll, TextBox1 sagt nichts über den Namen aus (Achte außerdem darauf, dass TextBox1_Enter1, usw. ebenfalls sinnvoll benannt s8ind, d.h. Enter1 -> Enter und halt davor der Name des Steuerelements nach der Änderung)
    - Beachte, dass das WebBrowser-Steuerelement als veraltet gilt

    Viele Grüße
    ~blaze~
    @~blaze~ Jou.
    @NoNameCoding Dein If-Konstrukt ist suboptimal:

    VB.NET-Quellcode

    1. If selectText = False Then
    2. TextBox1.SelectAll()
    3. selectText = True
    4. Else
    5. Exit Sub
    6. End If
    Sieh Dir mal diesen hier an, der macht genau dasselbe:

    VB.NET-Quellcode

    1. If selectText Then
    2. Exit Sub
    3. End If
    4. TextBox1.SelectAll()
    5. selectText = True
    Oder so, dalls gesichert ist, dass die Sub dann tatsächlich beendet wird:

    VB.NET-Quellcode

    1. If Not selectText Then
    2. TextBox1.SelectAll()
    3. selectText = True
    4. End If
    Ich würde die ereste Variante bevorzugen.
    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 hab' jetzt keine Quelle zur Vefügung, die das genauer beschreibt. Es handelt sich beim WebBrowser-Steuerelement wohl um eine alte Version des Internet Explorers, die eben in dieses Steuerelement gepackt wurde - und mit alt meine ich sehr alt ;).
    Die beste Möglichkeit, das zu ersetzen, wäre, einen der gängigen Browser als Programmbibliothek hinzuzufügen, das habe ich aber selbst noch nicht gemacht. Ich weiß nicht, ob Edge eine solche Programmbibliothek bereitstellt, aber es ist ggf. nicht die geschickteste Wahl. Ich bezweifle, dass abseits von Windows-Systemen das Programm läuft. Außerdem ist heutzutage nicht mehr garantiert, dass Edge, bzw. der IE auf jedem System installiert ist, da deren Anwesenheit nicht mehr verpflichtend ist (wenn auch empfohlen, was ich so gehört habe).

    Wenn die gängigen Browser nicht die Funktionalität bereitstellen, die du gerne hättest, wäre es ggf. eine Überlegung wert, Addons für die Browser zu schreiben, die diese um die gewünschte Funktionalität erweitern. Das ist allerdings dann mehr Aufwand und bringt wahrscheinlich keine schnellen Resultate. Ansonsten wirst du halt recht schnell von deinem eigenen Browser abspringen, schätze ich. Als Übungsprojekt ist das aber sicher kein schlechter Anfang.

    Was ich btw. auf Stackoverflow auf die Schnelle gefunden habe: Replacing .NET WebBrowser control with a better browser, like Chrome?
    Leider sind Browserkomponenten in der Regel sehr groß im Verhältnis zur .Net-Anwendung, die sie dann ausführt.

    Viele Grüße
    ~blaze~