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 Function
Eli 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 Class
Kiitos 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.