GroupBox(Frame)   otázka

VB.NET, WinForms

Ahoj!

Potřeboval bych prosím opět poradit ve VS2010

Tentokráte mám na formuláři několik TextBoxů,některé z nich

jsou umístěné navíc v GroupBox(Frame).Pokud spustím proceduru uvedenou níže,tak mi to projede pouze ty TextBoxi,kterou jsou umístěné přímo na formuláři,ty jež jsou vložené do GroupBoxu mi to vůbec neprojíždí.Musím nastavit ještě nějakou vlastnost některého z těchto prvků?

        Dim prvek As Control
        Dim TypPrvku As String
        
        For Each prvek In Me.Controls  'přepíše čárku na tečku
            TypPrvku = TypeName(prvek)
            If TypPrvku = "TextBox" Then
                prvek.Text = prvek.Text.Replace(",", ".")
            End If
        Next prvek
nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den, je potřeba projít kolekci Controls objektu, ve kterém jsou textboxy umístěny (ve Vašem případě to je GroupBox).

Takže v kódu který jste zde uvedl, najdete v Me.Controls ten GroupBox a texboxy budete hledat v kolekci controls toho GroupBoxu, protože tam jsou umístěny.

Představte si to jako kdyby jste měl měl několik krabiček naskládaných v sobě. Nejdřív vezmete tu největší, otevřete jí, v ní najdete menší, v ní zase menší atd. dokud nenaleznete to, co jste hledal. A s kolekcí Controls je to stejné, má ji každá vizuální komponenta, do kterého je možné umístit nějakou další.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Aha...

Já tento kód používal ve VBA a tam to fungovalo bez problémů,ale

s Frame.Takže se tady trocha s tím trápím.Zkoušel jsem s tím laborovat a jestli jsem to dobře pochopil kolekce GroupBox by měla být vnořená do té Me.Controls,nicméně jsem nějak nepochodil,můžete být konkrétnější jak by ten kod měl vypadat?

edit:

Tak už jsem se k tomu dopracoval,děkuji za nakopnutí...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Přesně to samé se řešilo zde: http://vbnet.cz/forum-tema--6512-vyps_22...

Jinak kód by mohl vypadat například takto:

       ' projdu kolekci controls formuláře
        For Each myFormsObject As Object In Me.Controls

            ' zkusím nalezený objekt přetypovat na groupbox. Pokud se přetypování povede, projdu kolekci controls daného grouboxu
            Dim tmpGroupBox As GroupBox = TryCast(myFormsObject, GroupBox)
            If tmpGroupBox IsNot Nothing Then

                ' projdu kolekci controls groupboxu
                For Each myGroupBoxObjects As Object In tmpGroupBox.Controls

                    ' zkusím objekt přetypovat na textbox, pokud se to povede, vypíšu jeho text
                    Dim tmpTextBox As TextBox = TryCast(myGroupBoxObjects, TextBox)
                    If tmpTextBox IsNot Nothing Then

                        Debug.Print(tmpTextBox.Text)

                    End If

                Next

            End If


        Next

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji

Já použil trochu víc komplikovaný postup,ale také funguje.

Ovšem řeším u toho další problém.Pokouším se předělat program co jsem spáchal ve VBA do VB2010 a spousta věcí zde nefunguje ....

        Dim prvek As Control
        Dim prvek1 As Control
        Dim TypPrvku As String

        For Each prvek In Formular.Controls 'Me.Controls
       TypPrvku = TypeName(prvek)
       If TypPrvku = "GroupBox" Then 'nejdříve vyhledá GroupBox
         For Each prvek1 In prvek.Controls 'následně hledá txtbox
                    TypPrvku = TypeName(prvek1)
                    If TypPrvku = "TextBox" Then
                      prvek1.Text = prvek1.Text.Replace(",", ".")
                    End If
                Next prvek1
            End If
        Next prvek

Potřebuji ať už jakoukoli z těch procedur použít jako funkci,kterou vyvolávám z různých formulářů.

Ve VBA jsem měl v modulu proměnnou

Public Formular as Object

ve Form_Load jsem měl

Set Formular

a takto to fungovalo ve VBA ale v VB2010 mi to ten "Set Formular" už nebere

Omlouvám se pokud to popisuju nesrozumitelně,nejsem žádný specialista...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den,

z vlastní zkušenosti bych Vám poradil aby jste tu aplikaci přepsal. Řešil jsem pár požadavků kdy jsem měl přepsat složitější excelová makra z VBA do VB a vytvořit plnohodnotnou aplikaci. Můžu Vám říct že s tím bylo víc práce než začít od začátku. Ve Visual Basicu můžete uplatnit mnohem lépe objektový přístup. Když si hned na začátku navrhnete správně objektovou strukturu půjde to pak samo. Navíc VBA spoustu věcí neumožňuje (nebo umožňuje mnohem složitěji) a přepsat to 1:1 stejně nejde, větším změnám se beztak nevyhnete.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

No o to se právě snažím to celé překopat,jenže právě nevím jak mám

nebo čím nahradi ten příkaz SET odkaz na nějaký objekt.

To, že to nepůjde nahradit 1:1 my bylo jasné ještě než jsem s tím začal,proto jsem to docela dlouho odkládal....

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A co ten příkaz Set Formular má dělat? (ve VBA bohužel až tak zběhlý nejsem).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Příkaz SET se používal i ve VB6,abych navypustil nějakou blbost,

tak napíšu jak na to poukazuje příručka(VB6)

Set - přiřadí proměnné odkaz na objekt

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ještě jenom doplním.Příkas je jenom Set, Formular je proměnná,kterou mám deklarovanou v modulu jako Formular as Object

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Aha, ve vb se formulář chová stejně jako jakýkoli jiný objekt nebo třída.

Dejme tomu, že máte vytvořený formulář, který se jmenuje formulář. Pak ho tedy použijete takto:

Dim mujFormular As New Formular() ' vytvoří se nová instance formuláře a zrovna se inicializuje
mujFormular.Show ' zobrazí se okno formuláře

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Hmmm,děkuji za ukázku,hold ve svém věku už potřebuji

nakopávat kapánek s větším rozběhem!!!!

Sice jsem se s tím chvíli trápil,ale povedlo se.

Mockrát děkuji.....

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback