Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: Muistava textbox? VB 2005

Sam76 [20.03.2008 14:26:18]

#

Voiko ks ohjelmalla määrittää textboksiin sellaista ominaisuutta, että se muistaisi edelliset kirjoitukset? Siis esim hakukenttään, jos haetaan samalla sanalla useasti niin ei tarvitsisi aina kirjoittaa sitä uudelleen vaan valitsisi sen listasta.

Ja toinen, kuinka pystyn tutkimaan esim. tämän tekstikenttään kirjoitetun muuttujan sisältöä? Jos haluaisin esimerkiksi tarkistaa, että siellä ei ole pistettä, pilkkua tms?

Antti Laaksonen [20.03.2008 23:41:02]

#

Tekstikentän muistin voi ainakin ohjelmoida itse keräämällä sanoja taulukkoon ja lisäämällä tekstikentän alapuolelle valintalistan, jossa ovat näkyvissä aiemmat sanat, joiden alkuosana on tekstikenttään sillä hetkellä kirjoitettu sana.

Kenties tämä ominaisuus on jossain valmiissa kontrollissa, jolloin sitä ei tarvitse ohjelmoida itse. Minulla ei ole kuitenkaan tarkempaa tietoa asiasta.

Tekstikenttään kirjoitettua tekstiä voi tutkia samalla tavalla kuin merkkijonoja yleensä. Esim. Length kertoo tekstin pituuden ja Chars palauttaa tietyssä kohdassa olevan merkin. Tässä tulee esimerkki, josta on ehkä hyötyä sinulle.

Dim i As Integer
Dim pituus As Integer
Dim merkki As Char
Dim pilkku As Boolean = False
Dim piste As Boolean = False
pituus = TextBox1.Text.Length
MsgBox("Merkkejä: " & pituus)
For i = 0 To pituus - 1
    merkki = TextBox1.Text.Chars(i)
    MsgBox("Merkki " & i & ": " & merkki)
    If merkki = "," Then pilkku = True
    If merkki = "." Then piste = True
Next
If pilkku Then MsgBox("Tekstissä oli pilkku.")
If piste Then MsgBox("Tekstissä oli piste.")

neau33 [21.03.2008 13:50:09]

#

Heippa Sam76!

väännä oheinen VB-classic jutska VB.NET muotoon

Dim hakusanat() As String

Private Sub Form_Load()
  If Dir(App.Path & "\hakusanat.dat") <> "" Then
    Open App.Path & "\hakusanat.dat" For Input As #1
    hakusanat = Split(Input$(LOF(1), 1), vbCrLf)
    Close #1
  Else
    ReDim hakusanat(0)
  End If
End Sub

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
  If hakusanat(0) <> "" Then
    For i = 0 To UBound(hakusanat)
      If Len(Text1) > 2 Then
        If Len(hakusanat(i)) >= Len(Text1.Text) Then
          If Left(hakusanat(i), Len(Text1.Text)) = Text1.Text Then
           Text1.Text = hakusanat(i): Exit For
          End If
        End If
      End If
    Next i
  End If
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  If hakusanat(0) <> "" Then
    Open App.Path & "\hakusanat.dat" For Output As #1
    For i = 0 To UBound(hakusanat)
      If hakusanat(i) <> "" Then
        Print #1, hakusanat(i) & vbCrLf
      End If
    Next i: Close #1
  End If
  Erase hakusanat
End Sub

Private Sub Text1_Change()
  Text1.SelStart = Len(Text1.Text)
End Sub

Private Sub Text1_LostFocus()
  If Text1.Text <> "" Then
    For i = 0 To UBound(hakusanat)
      If hakusanat(i) = Text1.Text Then: Exit Sub
    Next i
    hakusanat(UBound(hakusanat)) = Text1.Text
    ReDim Preserve hakusanat(UBound(hakusanat) + 1)
  End If
End Sub

Sam76 [21.03.2008 14:33:07]

#

Kiitos molemmille vastauksista. Nämä olivat juuri sitä mitä olin ajatellutkin.

Vastaus

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

Tietoa sivustosta