Ongelman kuvaus:
Tarkoituksena saada monikäyttöinen etsi-functio, jolle ilmoitetaan mitä(txt-laatikko) ja mistä haetaan(rtf-laatiko).
Jokin aika sitten neau33(kiitos siitä) opasti tälläisen haun, jotan olen muokannut hiukkasen.
Private Sub VR_hae2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VR_hae2.Click
SuoritaHaku(VR_haku) ' kutsutaan hakua ja annetaan sille txt-boksin arvo
End Sub
Public Sub SuoritaHaku(ByVal ctl As TextBox)
Dim sana As String
sana = ctl.Text
Dim i As Integer
For i = 0 To VR_kaikki.Text.Length
Etsi(sana, i, VR_kaikki.Text.Length)
VR_kaikki.SelectionColor = Color.Blue
VR_kaikki.SelectionFont = _
New Font(VR_kaikki.Font.Name, _
VR_kaikki.Font.Size, FontStyle.Bold)
Next i
VR_kaikki.Focus()
End Sub
Public Function Etsi(ByVal sana As String, ByVal alku As Integer, ByVal loppu As Integer) As Integer
Dim palaute As Integer = -1
If sana.Length > 0 And alku >= 0 Then
If loppu > alku Or loppu = -1 Then
Dim indeksi As Integer = _
VR_kaikki.Find(sana, alku, _
loppu, RichTextBoxFinds.MatchCase)
If indeksi >= 0 Then
palaute = indeksi
End If
End If
End If
Return palaute
End FunctionEli tämä toimii. Mutta en saa välitettyä kyseessä olevaa rtf-boksia muutoin kun nimeämällä se suoraan. Hakuja olisi kuitenkin tarkoitus tehdä kolmeen eri rtf-laatikkoon, joten olisi huomattavasti kätevämpää jos saisin ilmoitettua haun kohteenkin parametrinä. Mitä minun siis pitäisi tehdä?
Moikka Sam76!
toimisikohan näin...
Imports System.Windows.Forms
'...
Public Sub SuoritaHaku(ByVal ctl As TextBox)
Dim i As Integer, rtfboxi As RichTextBox
For each rtfboxi In Me Controls
'tähän väliin ehto jos haluat suodatella rtfboxeja
'If rtfboxi.Name.IndexOf("xyz") > -1 Then 'esim.
For i = 0 To rtfboxi.Text.Length
Etsi(rtfboxi, ctl.Text, i, rtfboxi.Text.Length)
rtfboxi.SelectionColor = Color.Blue
rtfboxi.SelectionFont = _
New Font(rtfboxi.Font.Name, _
rtfboxi.Font.Size, FontStyle.Bold)
Next i
'End If
rtfboxi.Focus()
Next
End Sub
Public Function Etsi(ByVal rtfboxi As RichTextBox, _
ByVal sana As String, ByVal alku As Integer, _
ByVal loppu As Integer) As Integer
'...
rtfboxi.Find(sana, alku, _
loppu, RichTextBoxFinds.MatchCase)
'...Moikka taas Sam76!
sori toi edellinen...systeemin päivitys...en voinut testata...
Tämän pitäisi nyt sitten wörkkiä (testattu SharpDevelop 3.0 Beta2:lla)
Imports System.Windows.Forms
Public Partial Class MainForm
Public Shared WithEvents rtfboxi As New RichTextBox()
Public Sub New()
Me.InitializeComponent()
End Sub
Sub Button1Click(sender As Object, e As EventArgs)
If textBox1.Text <> "" Then
SuoritaHaku(Me.textBox1)
End If
End Sub
Public Sub SuoritaHaku(ByVal ctl As TextBox)
Dim i As Integer = 0
Dim xctl As Control
For Each xctl In Me.Controls
If xctl.Name.IndexOf("richTextBox") > -1 Then
rtfboxi = xctl
For i = 1 To rtfboxi.Text.Length
Etsi(rtfboxi, ctl.Text, i,rtfboxi.Text.Length)
rtfboxi.SelectionColor = Color.Blue
rtfboxi.SelectionFont = _
New Font(rtfboxi.Font.Name, _
rtfboxi.Font.Size, FontStyle.Bold)
Next i
rtfboxi = Nothing
End If
Next
xctl = Nothing
End Sub
Public Function Etsi(ByVal rtfboxi As RichTextBox, _
ByVal sana As String, ByVal alku As Integer, _
ByVal loppu As Integer) As Integer
Dim palaute As Integer = -1
If sana.Length > 0 And alku >= 0 Then
If loppu > alku Or loppu = -1 Then
Dim indeksi As Integer = _
rtfboxi.Find(sana, alku, _
loppu, RichTextBoxFinds.MatchCase)
If indeksi >= 0 Then
palaute = indeksi
End If
End If
End If
Return palaute
End Function
Sub MainFormFormClosing(sender As Object, e As FormClosingEventArgs)
Me.Dispose
End Sub
Sub MainFormFormClosed(sender As Object, e As FormClosedEventArgs)
End
End Sub
End ClassKiitos Nea, olet hieno ihminen. En ehtinyt tuota ensimmäistä esitystä edes kokeilla kun tuli menoja (olin kalassa pari päivää :).
Tämä uusi versio näyttää hienolta mutta menee minulta äkkiseltään osittain ohi. En ole aimmin törmännyt tälläiseen "Partial Class MainForm" -luokkarakenteeseen. Onko tämä tarkoitus sisällyttää mainform-luokkaan vai toteutetaanko se omana luokkana, vai miten sen kanssa tehdään? Yritän perehtyä asiaan huomenissa, jos vaikka olisi vähän enempi virtaa käytettävissä. Nyt huutaa akut tyhjää..
Aihe on jo aika vanha, joten et voi enää vastata siihen.