Przeszukiwanie TextBoxów znajdujących się na TabPage

0

W jaki sposob moge przeszukac WSZYSTKIE TextBox3, które znajdują się na kartach TabPage na PageControl1 ?

to ma wyglac tak:

jeżeli słowo z Textbox3.Text znajduje sie w przeszukiwana_linia to.....TabControl1.SelectedTab = box.Parent
gdyby nie UserControl to wystarczyłby taki kod:

Private Sub szukanie_w_liniach()
        Dim przeszukiwana_linia As String = ListBox1.SelectedItem.ToString
        Dim ctrl, ctrl2 As Control
        For Each ctrl In TabControl1.Controls
            If TypeOf (ctrl) Is TabPage Then
                Dim page As TabPage = ctrl
                For Each ctrl2 In page.Controls
                    If TypeOf (ctrl2) Is TextBox Then
                        Dim box As TextBox = ctrl2
                        Dim pos As Boolean = przeszukiwana_linia.Contains(box.Text)
                        If pos And Not box.Text = "" Then
                            TextBox2.Text = box.Text
                            TabControl1.SelectedTab = box.Parent
                            Exit Sub
                        End If
                    End If
                Next
            End If
        Next

Ale niestety on nie przeszukuje TextBoxow znajdujacych sie na UserControl :(

@kAzek

0

Wiesz że skoro to wszystko masz w UserControl to możesz w nim napisać metodę która robi co tam chcesz?

0

wlasnie chodzi o to, że Przeszukiwany tekst znajduje sie na Form1 , natomiast elementy które aplikacja ma szukac w przeszukiwanym tekscie znajdują sie na UserControl1

poza tym mam wiele kart w programie....TabPages również są na Form1...a cała zawartość TabPage'a to już UserControl

mi się zdaje , że jak mam ten kod foreach in Page.Controls to sprawdza tylko TextBoxy...pewnie trzeba jeszcze jakoś do PageControl wejsc i dopiero szukac

1

Nie wiem już czy dobrze zrozumiałem masz na każdym tab kontrolkę UserControl na której jest TextBox3 i teraz jeżeli w TextBox3 tekst jest częścią (lub całością) tekstu zawartego w zaznaczonej pozycji ListBox to trzeba wybrać tą zakładkę na której jest ten TextBox?

    Private Sub SelectTabByTextBoxText(TabPage As TabPage, ParentCtrl As Control, TextBoxName As String, SearchText As String)
        If ParentCtrl.HasChildren Then
            For Each Ctrl As Control In ParentCtrl.Controls
                If ((TypeOf Ctrl Is TextBox) And (Ctrl.Name.Equals(TextBoxName)) And (Ctrl.Text.Length > 0) _
                        And (SearchText.Contains(Ctrl.Text))) Then
                    If Not IsNothing(TabPage) Then
                        Dim TabCtrl = CType(TabPage.Parent, TabControl)
                        TabCtrl.SelectedTab = TabPage
                    End If
                    Exit Sub
                End If
                SelectTabByTextBoxText(TabPage, Ctrl, TextBoxName, SearchText)
            Next
        End If
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        For PageIndex As Integer = 0 To TabControl1.TabCount - 1
            SelectTabByTextBoxText(TabControl1.TabPages(PageIndex), TabControl1.TabPages(PageIndex), "TextBox3", ListBox1.SelectedItem.ToString)
        Next
    End Sub

EDIT: Poprawiłem bo się pomyliłem i nie działało :/

0

tak, dobrze zrozumiales...
juz dziala wszystko fajnie :)

miałbym jeszcze tylko jedną prosbę..... malutką :)

jeszcze bym chciał aby na tym samym tabpage gdzie znaleziono "slowo" z textboxa3, to obok niego jest textbox2 , chcialbym by cała linijka ListBox1.SelectedItem.ToString wędrowala wlasnie tam, w przypadku jeżeli (ListBox1.SelectedItem.ToString zawiera w sobie textbox3)

sorki ale nie chcialem Od razu tyle tlumaczyc bo za duże zamieszanie by bylo :)
@kAzek

0

Umiesz w ogóle korzystać z funkcji / procedur? Przecież do zmiany tekstu w TextBox po nazwie kontrolki już miałeś teraz wystarczy niewielka przeróbka na funkcję procedury służącej do zmiany wybranej zakładki i po krzyku.

    Private Sub SetTextBoxCtrlTextByCtrlName(ParentCtrl As Control, TextBoxName As String, CtrlText As String)
        If ParentCtrl.HasChildren Then
            For Each Ctrl As Control In ParentCtrl.Controls
                If (TypeOf Ctrl Is TextBox) And (Ctrl.Name.Equals(TextBoxName)) Then
                    Ctrl.Text = CtrlText
                    Exit Sub
                End If
                SetTextBoxCtrlTextByCtrlName(Ctrl, TextBoxName, CtrlText)
            Next
        End If
    End Sub

    Private Function SelectTabByTextBoxText(TabPage As TabPage, ParentCtrl As Control, TextBoxName As String, SearchText As String) As Boolean
        SelectTabByTextBoxText = False
        If ParentCtrl.HasChildren Then
            For Each Ctrl As Control In ParentCtrl.Controls
                If ((TypeOf Ctrl Is TextBox) And (Ctrl.Name.Equals(TextBoxName)) And (Ctrl.Text.Length > 0) _
                        And (SearchText.Contains(Ctrl.Text))) Then
                    If Not IsNothing(TabPage) Then
                        Dim TabCtrl = CType(TabPage.Parent, TabControl)
                        TabCtrl.SelectedTab = TabPage
                        SelectTabByTextBoxText = True
                    End If
                    Exit Function
                End If
                SelectTabByTextBoxText = SelectTabByTextBoxText(TabPage, Ctrl, TextBoxName, SearchText)
            Next
        End If
    End Function

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        For PageIndex As Integer = 0 To TabControl1.TabCount - 1
            If SelectTabByTextBoxText(TabControl1.TabPages(PageIndex), TabControl1.TabPages(PageIndex), "TextBox3", ListBox1.SelectedItem.ToString) Then
                SetTextBoxCtrlTextByCtrlName(TabControl1.TabPages(PageIndex), "TextBox2", ListBox1.SelectedItem.ToString)
                Exit Sub
            End If
        Next
    End Sub

1 użytkowników online, w tym zalogowanych: 0, gości: 1