Proměnná u Controls   zodpovězená otázka

VB.NET, WinForms

Dobrý den, omlouvám se, jestli se to tady už někde řešilo, ale nic jsem nanašel. Takže k tomu co potřebuji. Mám program ve kterém se vytváří richtextboxy, podle uživatele. To znamená, že nikdy dopředu nevím, kolik richtextboxů bude na formuláři. Dejme tomu, že chci po kliknutí na tlačítko do všech richtextboxů na formuláři vypsat text "blablabla". Zkoušel jsem toto, ale nefunguje. Zřejmě bude chyba v tom prostředním řádku kodu.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

  For Each richtextbox As Control In me.Controls

       richtextbox.Text = "blablabla"

  Next richtextbox

End Sub

Prosím poraďte.

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

Co znamená nefunguje? Jako že se nic nestane, RTBoxy nejsou vidět, spadne to na výjimku, .... ?

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

Nene, prostě to nic neudělá. Já si myslím, že je chyba právě v tom prostředním řádku kodu, jelikož neurčuji přesný richtextbox ale všeobecný. A právě proto potřebuji poradit. Nevím jak projít všechny richtextboxy, aniž bych věděl jejich počet.

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

Váším kódem procházíte všechny prvky formuláře. Že jste pojmenoval proměnnou "richtextbox" z ní nedělá typ RichTextBox. Pokud se cyklus provede, měl by přepsat texty RichtextBoxů i text Button1... jestli nedělá nic, asi se neprovede. Zkuste kód krokovat.

Nevím, co vlastně na formuláři máte, tak zkuste tohle, MsgBox napoví:

  Private Sub Button1_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles Button1.Click
    For Each c As Control In Me.Controls
      If c.GetType.Name = "RichTextBox" Then
        c.Text = "blablabla"
      End If
      MsgBox("Prvek: " & c.GetType.Name & " - jméno: " & c.Name)
    Next c
  End Sub

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

Díky ! Už to funguje. Potřeboval jsem právě něco jako tohle

c.GetType.Name = "RichTextBox"

takže dík. A neni nějaká funkce abych kontroloval nejen jméno, ale i číslo richtextboxu ? Hádám, že to bude místo toho .name. Zkusím tu funkci vyhledat. Tak zatim dík. Fakt to pomohlo.

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

Řešení je víc.

Private Sub Button1_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles Button1.Click

    For Each prvek As Object In Me.Controls
       If TypeOf (prvek) Is RichTextBox Then
          DirectCast(prvek, RichTextBox).Text = "něco"
       End If
    Next

End Sub

A nevím co myslíte číslem richtextboxu ? Jako jeho tabIndex nebo je vytváříte dynamicky jako pole a chcete číslo z názvu ?

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

Děkuji, též funguje skvěle. A k tomu číslu. Na formuláři se mi vytvoří např. richtextbox1, richtextbox2, richtextbox3 (to podle chování uživatele - kliknutím na button2 se mu přidá na formulář richtextbox) a potřebuji zjistit, např. podle vašeho ukázkového kodu, o jaký richtextbox se jedná. Např. do richtextboxu1 se přidá text "Jednička", do richtextboxu2 se přidá "Dvojka" ... Tak jestli mě někdo pochopil a ví jak na to, prosím poraďte. Děkuji

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

Váš popis problému není zrovna nejlepší.

"Na formuláři se mi vytvoří např. richtextbox1, richtextbox2, richtextbox3 (to podle chování uživatele - kliknutím na button2 se mu přidá na formulář richtextbox)"

Pokud se na formuláři něco mění, tak podle programu, který tvoříte. Jestli na výsledek má vliv "chování" uživatele, pak je to pouze jeho výběr z možností dané programem. Máte tedy nástroje k tomu, abyste jednotlivé prvky identifikoval. Třeba podle jména. Jestli se liší připojenou číslicí a chcete ji zjistit, jde o práci s typem String (jméno je text - řetězec - typ String).

 ' Číslo RichTextBoxu, je-li jeho jméno "richtextbox" a číslice
 ' a bylo zjištěno v cyklu For Eaxh jako c.Name:
  Dim cislo as Integer =  CInt(c.Name.Substring(11))
 ' pozor na  RichTextBox s jinou délkou jména!

Každý prvek nese další informace, např. Tag - tam můžete rozlišovací informaci vložit při přidání prvku.

 ' vložíte-li číslice do Tag při přidání prvku, zjistíte číslo:
 Dim cislo as Integer =  CInt(c.Tag)

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

JJ děkuji. Udělal jsem to po vašem a funguje. Takže ještě jednou díky všem, kteří se mi snažili pomoct a přeji pěkný zbytek dne.

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