proměna v názvu objektu   otázka

VB.NET, WinForms

Dobrý den

mam na formuláři spoustu objektu PictureBox1.Image až PictureBox40.Image

Potřeboval bych pro zjednodušení celé aplikace vkládat proměnou "x" do názvu objektu. Přectavuji si to nějak takhle "PictureBox(x).Image" proměna x=1 až 40

Děkuji za odpověd

Jsem jenom amater :)

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

Řešení se zde dá najít, stačí se hledání trochu věnovat.

nahlásit spamnahlásit spam -5 / 5 odpovědětodpovědět

Môžte si napríklad nahádzať tieto PictureBoxy do poľa, a potom pristupovať k n-tému prvku poľa. Ale zrovna použiť premennú, ako časť názvu inej premennej v kóde nie je možné. Na túto vec sú práve polia, alebo ešte rozličné typy kolekcií, slovníkov a pod. v namespace System.Collections. ,resp. jemu podriadených namespace.

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

Takže to asi nebude tak jednoduché :(

Chtěl jsem to ze dvou duvodu

1. potřebuji někdy hromadně nastavit u PictureBoxu visible,enable a stejný obrazek

nato by byla smyčka for i=1 to 40 byla nejednoduši

tak budu muset napsat 40x visible = true ......

2.potřebiji v proceduře PictureBoxy(x) měnit vlastnosti PictureBoxy(y) a ta je pokažde jiná

to jsem zatim vyřešil tak že volam proceduru kde podle proměne x a vyhodnovacího IF then (40x) zistim přislušny PictureBox a provedu v něm změny

je to trochu těši na psani vše se opakuje 40x :)

Děkuji za rady

Kdy bys te chtěl se rozpovidat o vložení do proměne tak bych byl rád, už jsem experimentoval ale stale nic.

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

Tři způsoby:

For i As Integer = 6 To 8
                    DirectCast(Me.Controls("Label" & i.ToString()), Label).Visible = True
                    'Me.Controls(Me.Controls.IndexOfKey("Label" & i.ToString)).Visible = True
                    'Dim lb As Label = Me.Controls.Find("Label" & i.ToString(), False)(0)
                    'lb.Visible = True
                Next

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

Aj to je možné, ale stále by som doporučil uchovávať Pictureboxy v poli, kolekcii, alebo slovníku, pretože prehľadať celú kolekciu Controls niečo trvá.

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

A prohledávání výše uvedeného netrvá nic? Naopak je to blbost, protože to jen zabere další (byť zanedbatelné) místo v paměti nehledě na to, že se to bude muset synchronizovat pokud v kolekci Controls dojde za běhu ke změnám.

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

Bude fungovat pouze když se ovládací prvek bude jmenovat Labeln a bude to skutečně Windows.Forms.Label.

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

Takže to asi nebude tak jednoduché :(

Chtěl jsem to ze dvou duvodu

1. potřebuji někdy hromadně nastavit u PictureBoxu visible,enable a stejný obrazek

nato by byla smyčka for i=1 to 40 byla nejednoduši

tak budu muset napsat 40x visible = true ......

2.potřebiji v proceduře PictureBoxy(x) měnit vlastnosti PictureBoxy(y) a ta je pokažde jiná

to jsem zatim vyřešil tak že volam proceduru kde podle proměne x a vyhodnovacího IF then (40x) zistim přislušny PictureBox a provedu v něm změny

je to trochu těši na psani vše se opakuje 40x :)

Děkuji za rady

Kdy bys te chtěl se rozpovidat o vložení do pole tak bych byl rád, už jsem experimentoval ale stale nic.

PS: omlouvam se za dvoji post

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

Pane Bože, to Vám nikto nevravel o poliach,kolekciách, slovníkoch a pod. ? Ani o tom, že všetko, čo pridáte na formulár, sa pridá aj do kolekcie Me.Controls ? Keď sa PictureBoxy volajú PictureBox1 až PictureBox40, tak stačí poskladať reťazce "PictureBox" a i.ToString(), kde i má byť ID PictureBoxu. A potom, keď už máme názov konkrétneho PictureBoxu v premennej, tak vytiahneme prvok kolekcie Me.Controls s názvom, ktorý máme v premennej. Konkrétny kód nájdete vyššie v tomto vlákne.

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

Děkuji za odpověd

VB mam asi měsíc takže hodně tápu.

Kdysi jsem ještě na ZX spectru v basicu a ve strojaku něco tukal :)

Takže podobnost VB a ZX basicu je hodně malá.

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

Zkuste trochu hledat inspiraci:

http://www.vbnet.cz/forum-tema--2029-ind...

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