Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: [VB.NET] Koodin väritys

ErroR++ [13.08.2011 17:44:55]

#

Moi!!!
Olis tässä semmonen ongelma, etä teen koodille väritystä ja se ei toimi. Koodi:

Function colors(ByVal box As RichTextBox)
       Dim text As String = box.Text
       box.Clear()
       Dim merkki As Char = ""
       Dim mCounter As Long = 1
       Dim lainauschr As Boolean = False
       Do
           merkki = Mid(text, mCounter, 1)
           Select Case merkki
               Case """"
                   If lainauschr = True Then
                       box.SelectionColor = Color.Black
                       lainauschr = False
                   Else
                       box.SelectionColor = Color.Red
                       lainauschr = True
                   End If
           End Select
           box.Text = box.Text & merkki
           mCounter += 1
           Application.DoEvents()
       Loop Until mCounter = Len(text) + 1
   End Function

Mikä mättää??
Pitääkö texti jotenkin "Printata" sinne boxiin??

Grez [13.08.2011 22:03:35]

#

Et missään vaiheessa määritä valintaa siellä richtextboxissa. Jos käyttäjä onnistuu tuon pyörimisen aikana valitsemaan jonkun pätkän tekstistä, niin sitten tuo skriptisi vaihtelee sen kyseisen pätkän väriä, kunnes lopulta väriksi jää se väri mikä viimeisen merkin perusteella olisi.

Luultavasti seuraava toimisi paremmin (ei kokeiltu)

Sub colors(ByVal box As RichTextBox)
    Dim i As Integer, lainauschr As Boolean
    For i = 0 To box.Text.Length - 1
        box.SelectionStart = i
        box.SelectionLength = 1
        Select Case box.SelectedText
            Case """"
                If lainauschr = True Then
                    box.SelectionColor = Color.Black
                    lainauschr = False
                Else
                    box.SelectionColor = Color.Red
                    lainauschr = True
                End If
        End Select
        Application.DoEvents()
    Next
End Sub

ErroR++ [14.08.2011 13:11:18]

#

Joo täytyy kopioida se.
Teen hommaa omalla koneellani ja tietysti elisan/saunalahden verkot ovat kaatuneet joten tulin toiselle koneelle katsomaan tänne.

Joo toimii kyllä(raahasin sen tossa nopeesti omalle koneelle muistitikulla)
mutta täytyy lisätä vielä yksi muuttuja. Se osoittaisi että on tullut toinen lainausmerkki ja... jotain tonne päin

ErroR++ [14.08.2011 13:38:37]

#

Mä osasin tehä sen!

Sub colors(ByVal box As RichTextBox)
    Dim i As Integer, lainauschr As Boolean, redtext As Boolean = False
    For i = 0 To box.Text.Length - 1
        box.SelectionStart = i
        box.SelectionLength = 1
        If lainauschr = True Then
            box.SelectionColor = Color.Red
        End If
        If redtext = True Then
            box.Select(i - 1, 1)
            box.SelectionColor = Color.Red
            redtext = False
            GoTo appdoevents
        End If
        Select Case box.SelectedText
            Case """"
                If lainauschr = True Then
                    box.SelectionColor = Color.Black
                    lainauschr = False
                    redtext = True
                Else
                    box.SelectionColor = Color.Red
                    lainauschr = True
                End If
        End Select
appdoevents:
        Application.DoEvents()
    Next
End Sub

ErroR++ [14.08.2011 18:29:43]

#

Mättää taas! Noi keywordit...

Module ModuleColoring
    Sub colorsred(ByVal box As RichTextBox)
        Dim i As Integer, lainauschr As Boolean, redtext As Boolean = False
        For i = 0 To box.Text.Length
            box.SelectionStart = i
            box.SelectionLength = 1
            If lainauschr = True Then
                box.SelectionColor = Color.Red
            End If
            If redtext = True Then
                box.Select(i - 1, 1)
                box.SelectionColor = Color.Red
                redtext = False
                GoTo appdoevents
            End If
            Select Case box.SelectedText
                Case """"
                    If lainauschr = True Then
                        box.SelectionColor = Color.Black
                        lainauschr = False
                        redtext = True
                    Else
                        box.SelectionColor = Color.Red
                        lainauschr = True
                    End If
            End Select
appdoevents:
            Application.DoEvents()
        Next
    End Sub
    Sub colorscomment(ByVal box As RichTextBox)
        Dim i As Integer, lainauschr As Boolean, redtext As Boolean = False
        For i = 0 To box.Text.Length
            box.SelectionStart = i
            box.SelectionLength = 1
            If lainauschr = True Then
                box.SelectionColor = Color.Orange
            End If
            If redtext = True Then
                box.Select(i - 1, 1)
                box.SelectionColor = Color.Orange
                redtext = False
                GoTo appdoevents
            End If
            Select Case box.SelectedText
                Case "'"
                    If lainauschr = True Then
                        box.SelectionColor = Color.Black
                        lainauschr = False
                        redtext = True
                    Else
                        box.SelectionColor = Color.Orange
                        lainauschr = True
                    End If
            End Select
appdoevents:
            Application.DoEvents()
        Next
    End Sub
    Sub colDefine(ByVal box As RichTextBox)
        Dim i As Integer, lainauschr As Boolean, redtext As Boolean = False
        For i = 0 To box.Text.Length
            box.SelectionStart = i
            box.SelectionLength = 1
            If lainauschr = True Then
                box.SelectionColor = Color.LightGray
            End If
            If redtext = True Then
                box.Select(i - 1, 1)
                box.SelectionColor = Color.Aqua
                redtext = False
                GoTo appdoevents
            End If
            Select Case box.SelectedText
                Case "#"
                    If lainauschr = True Then
                        box.SelectionColor = Color.Black
                        lainauschr = False
                        redtext = True
                    Else
                        box.SelectionColor = Color.Aqua
                        lainauschr = True
                    End If
            End Select
appdoevents:
            Application.DoEvents()
        Next
    End Sub
    Sub colnumbers(ByVal box As RichTextBox)
        Dim i As Integer = 1
        Dim merkki As Char = ""
        Do
            merkki = Mid(box.Text, i, 1)
            box.Select(i - 1, 1)
            Select Case Asc(merkki)
                Case 48 To 57
                    'numero
                    box.SelectionColor = Color.Brown
            End Select
            i += 1
        Loop Until i = box.Text.Length + 1
    End Sub

    Sub colKeywords(ByVal box As RichTextBox)
        On Error GoTo virhe
        Dim sanat(14) As String
        Dim i As Integer = 0
        Dim paikka As Integer = 0
        Dim sana As String = ""
        Dim merkki As Char = ""
        sanat(0) = "print"
        sanat(1) = "scan"
        sanat(2) = "end"
        sanat(3) = "private"
        sanat(4) = "public"
        sanat(5) = "int"
        sanat(6) = "char"
        sanat(7) = "long"
        sanat(8) = ";"
        sanat(9) = "move"
        sanat(10) = "if"
        sanat(11) = "then"
        sanat(12) = "elseif"
        sanat(13) = "else"
        sanat(14) = "endif"
nextWord:  'seuraava sana
        paikka = i 'sanan alku
        i += 1
        Do
            If i = box.Text.Length Then Exit Sub
            merkki = Mid(box.Text, i, 1)
            If merkki = " " Then Exit Do
            sana = sana & merkki
            i += 1
        Loop
tarkistus:  'tarkistetaan, ettei sana ole avainsana
        For n As Integer = 0 To sanat.Length - 1
            If sana = sanat(n) Then
                'sana on avainsana (keyword)!
                'värjätään siitä sininen!
                box.SelectionStart = paikka
                box.SelectionLength = i
                box.SelectionColor = Color.Blue
                sana = ""
                merkki = ""
                GoTo nextWord
            End If
        Next
        sana = ""
        merkki = ""
        GoTo nextWord
        Exit Sub
virhe:
        Exit Sub
    End Sub
    Sub colors(ByVal box As RichTextBox)
        Dim curspos As Point
        curspos = Cursor.Position
        colKeywords(box)
        colorsred(box)
        colorscomment(box)
        colDefine(box)
        colnumbers(box)
        Cursor.Position = curspos
    End Sub
End Module

Grez [14.08.2011 18:43:36]

#

yäääääh. Sori, mutta itku meinas päästä tuota lukiessa. No jos nyt otan kantaa vain siihen miksi tuo ei toimi, niin ensinnäkin tuohan toimii jos noi avainsanat mitä sulla on, on kirjoitettu pienellä siellä koodissakin.

Eli ehkäpä muuttaisin vertailun kirjainkokoa huomioimattomaksi rivillä 138:

If sana = sanat(n) Then
'tilalle -->
If String.Compare(sana, sanat(n), StringComparison.InvariantCultureIgnoreCase) = 0 Then

Epäilen muuten, ettei värittimesi tule löytämään hirveästi endif avainsanoja.

ErroR++ [15.08.2011 16:58:39]

#

Ajatele: Melkein kaiken koodin tein siitä esimerkistä jonka sinä teit!
Muuten tuo väritys melkein toimii, mutta se värittää vähän muutakin kuin pelkät avainsanat.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta