RichTextBox a URL odkaz   zodpovězená otázka

VB.NET, WinForms

Dobrý večer!

Riešim taký problém:

Na internetovej stránky mám takýto text: "the Beaufort scale. A very light", kde "Beaufort scale" je inej farby a keď naňho prídem kurzorom, podčiarkne sa. Je to v skutočnosti odkaz na iné stránky. Pokliknutí naňho otvorí inú stránku.

Vo svojom projekte mám RichTextBox do ktorého po spustení uvedený text z internetovej stránky skopirujem. Zobrazí sa takto: "the Beaufort scale <http://www.bbc.co.uk/weather/features/un...>. A very light"

Vedel by mi niekto poradiť, ako zachovať v RichTextBox-e text: "Beaufort scale" ako URL odkaz, pričom text <> zátvorkách by sa nezobrazoval?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Niečo som vypotil a funguje to, až na jednú vec. Neviem vyriešiť ako zmeniť kurzor myši pri nabehnutí na časť textu. Potreboval by som index (dĺžku textu) pozicie kurzora myši v RitchTextBox-e

 Private Sub RichTextBox1_MouseHover(ByVal sender As Object, ByVal e As System.EventArgs) Handles RichTextBox1.MouseHover

A tu je môj kód. Dúfam, že niekto mi napíše, ako sa to dalo riešť jediným kliknutím.

Príjemný večer

Public Class Form1
    Dim i, j, k, m As Integer
    Dim iOdkaz(100) As Integer
    Dim sURL(100) As String
    Dim bCTRL As Boolean
    Private Sub RichTextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
        'Nacita a ulozi indexy zaciatku a konca webovych adries
        Do While RichTextBox1.Text.IndexOf("<htt", i) > -1
            i = Me.RichTextBox1.Text.IndexOf("<htt", i)
            j = Me.RichTextBox1.Text.IndexOf(">", i)
            Me.RichTextBox1.Select(i + 8, j - i - 8)
            sURL(k) = Me.RichTextBox1.SelectedText
            'Nacita a ulozi indexy  koncov odkazov na web stranky
            m = i - 1
            iOdkaz(k + 1) = m
            'Nacita a ulozi indexy zaciatkov odkazov na web stranky
            Do
                m -= 1
                Me.RichTextBox1.Select(m, 1)
            Loop While Me.RichTextBox1.SelectionFont.Underline = True
            iOdkaz(k) = m
            Me.RichTextBox1.Select(iOdkaz(k), iOdkaz(k + 1) - iOdkaz(k))
            'Vymaze http odkazy
            Me.RichTextBox1.Select(i, j - i + 1)
            Me.RichTextBox1.SelectedText = ""
            i += 1
            k += 2
        Loop
    End Sub
    'Zapamata si poziciu CTRL klavesy
    Private Sub RichTextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles RichTextBox1.KeyDown
        If e.KeyCode = Keys.ControlKey Then
            bCTRL = True
        End If
    End Sub
    Private Sub RichTextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles RichTextBox1.KeyUp
        bCTRL = False
    End Sub
    'Po stlaceni CTRL a kliknuti mysou na odkaz zobrazi stranku
    Private Sub RichTextBox1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles RichTextBox1.MouseClick
        If bCTRL = True Then
            For i = 0 To k Step 2
                If Me.RichTextBox1.SelectionStart >= iOdkaz(i) And RichTextBox1.SelectionStart <= iOdkaz(i + 1) Then
                    Me.WebBrowser1.Navigate(sURL(i), "stranka")
                End If
            Next
        End If
    End Sub
    Private Sub RichTextBox1_MouseHover(ByVal sender As Object, ByVal e As System.EventArgs) Handles RichTextBox1.MouseHover
        ' Tu by som potreboval kod, ktory by zmenil kurzor mysi.
    End Sub
End Class

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Pro vytvoření odkazu lze s výhodou použít k tomu určený LinkLabel

  Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, _
     ByVal e As System.EventArgs) Handles MyBase.Load
      Dim t1 As String = "Stránku otevřete kliknutím "
      Dim t2 As String = "ZDE"
      LinkLabel1.Text = t1 & t2
      ' pridat položku, kde je pozice začátku, délka aktivního textu odkazu a adresa 
      LinkLabel1.Links.Add(t1.Length, t2.Length, "www.vbnet.cz")
    End Sub

    Private Sub LinkLabel1_LinkClicked(ByVal sender As Object, _
     ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) _
     Handles LinkLabel1.LinkClicked
      Dim cil As String = CType(e.Link.LinkData, String) ' načtení adresy odkazu
      System.Diagnostics.Process.Start(cil) ' spuštění defaultního prohlížeče s adresou cíle
    End Sub
  End Class

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Dobrý večer, ďakujem za odpoveď.

Vami uvedený kód nerieši požiadavku, ktorú som mal. Ja mám vo svojom projekte iba jeden RichTextBox do ktorého skopirujem časť ľubovoľnej stránky z internetu s odkazmi, tak aby tieto fungovali. Čiže ja vopred neviem, koľko tých odkazov bude a kde budú. Tie sú totiž uložené v bežnom texte. Vo Worde to funguje a vlastne aj mne (môžte si to vyskúšať), až na hore uvedený problémik (zmena kurzoru pri nájazde myšou na odkaz)a môj kód sa mi zdá dosť hrboľatý.

Napriek tomu Vám za Váš kód ďakujem, lebo ste v ňom uviedli pre mňa niekoľko nových a úžitočných vecí.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
 ' změna kurzoru na ruku:  
  Cursor.Current = System.Windows.Forms.Cursors.Hand

  ' reset kurzoru (návrat na původní):
  Cursor.Current = System.Windows.Forms.Cursors.Default

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Vďaka, už sme blízko, lenže môj hlavný problém je v tom, že neviem zistiť polohu kurzora myši v RichTextBoxe vyjadrenú v počte znakov. Proste nad ktorým znakom v poradí je kurzor myši.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No už to mám

Private Sub RichTextBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles RichTextBox1.MouseMove
        Dim charIndex As Integer = RichTextBox1.GetCharIndexFromPosition(New Point(e.X, e.Y))
    End Sub

Ďakujem za pomoc!

Prijemný večer!

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Takže len pre úplnosť. Stači k vyššie uvedenému kódu pridať

Private Sub RichTextBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles RichTextBox1.MouseMove
        Dim charIndex As Integer = RichTextBox1.GetCharIndexFromPosition(New Point(e.X, e.Y))
        For i = 0 To k Step 2
            If charIndex >= iOdkaz(i) And charIndex <= iOdkaz(i + 1) Then
                Cursor.Current = System.Windows.Forms.Cursors.Hand
            End If
        Next
    End Sub

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback