IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Michal Maršálek:11.8.2012 15:08

Zdravím. Mám ve formuláři řekněme sto textBoxů pojmenovaných textBox1 až textBox100. Teď bych chtěl ve for cyklu nastavit všem těm textBoxům nějakou vlastnost. Jak to udělám? Jak sloučím text "textBox" s proměnnou i, která mi udává iteraci v cyklu tak, abych dostal textBoxi, kde i bude od 1 do 100, abych mohl tomu textBoxu nastavit nějakou vlastnost (třeba text na ":)" )?
Díky.

 
Odpovědět
11.8.2012 15:08
Avatar
Odpovídá na Michal Maršálek
Michal Maršálek:11.8.2012 15:11

V php bych použil $("textBox".$i), ale jak na to v C#?

 
Nahoru Odpovědět
11.8.2012 15:11
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Michal Maršálek
David Hartinger:11.8.2012 15:13

To se mi nezdá. Sestavovat jméno takhle je špatný přístup a musel bys použít např. reflexi, abys k checkboxu mohl přistupovat. Měl by sis dát textboxy do nějakého kontejneru (např. Panel) a poté proiterovat jeho pole Controls.

Možná ale potřebuješ spíše tabulku (třeba přes ListView/DataGrid), nějak si nedokáži představit případ, kde bys potřeboval tolik textboxů.

Nahoru Odpovědět
11.8.2012 15:13
New kid back on the block with a R.I.P
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Michal Maršálek
David Hartinger:11.8.2012 15:14

A ten kód cos označil jako PHP je nesmyslný.

Nahoru Odpovědět
11.8.2012 15:14
New kid back on the block with a R.I.P
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na Michal Maršálek
David Jančík:11.8.2012 15:20

Projeď všechny komponenty foreachem:

foreach (Control component in this.Controls)

Pak si můžeš zjistit jejich název

component.Name.Contains("textBox")

Nebo dosazuj ty čísla od 1 do 100.
A pak si to můžeš přetypovat na textBox a pracovat s tím.

component as TextBox

Ale minimálně by jsi si to měl dát do nějakého kontejneru.

Nahoru Odpovědět
11.8.2012 15:20
Zapomeň, že je to nemožné a udělej to ;)
Avatar
Michal Maršálek:11.8.2012 16:02

Mám je v TableLayoutPanel. Prostě jsem chtěl string o délce 100 znaků rozdělit do pole o 100 prvcích a do každého ze sta textBoxů vložit jeden znak. Myslel jsem si, že to půjde nějak jednoduše, tak jako bych to udělal v php. Proč je ten kód nesmyslný?

 
Nahoru Odpovědět
11.8.2012 16:02
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na Michal Maršálek
David Jančík:11.8.2012 16:10

Zkoušel jsi moje řešení?
Protože v php nepřistupuješ takto k html prvkům.
Musel bys použít javascript. Zavánělo to jQuery. To by bylo $("#textarea" + i).html v php bys mohl přistupovat leda k poli nebo více proměnným $pole['data' . $i]

Nahoru Odpovědět
11.8.2012 16:10
Zapomeň, že je to nemožné a udělej to ;)
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Michal Maršálek
David Hartinger:11.8.2012 16:12

Jednoduše to nejde, protože mít 1 znak ve 100 textboxech mi nepřijde jako standardní aplikace na kterou jsou jazyk nebo komponenty přizpůsobeny, co konkrétně chceš dělat?

Na kód jsem se špatně podíval, moje chyba :)

Nahoru Odpovědět
11.8.2012 16:12
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Jančík
Michal Maršálek:11.8.2012 16:25

Ano, myslel jsem to jako proměnnou, které bych změnil hodnotu.
Tvoje řešení jsem zkoušel, ale nic to nedělá. :(

 
Nahoru Odpovědět
11.8.2012 16:25
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Michal Maršálek
David Hartinger:11.8.2012 16:28

Proiteruj si kontroly toho kontejneru (místo Kontejner bude ten Panel1 nebo něco, v čem máš ty TextBoxy)

foreach (Control textBox in Kontejner)
{
    ((TextBox)(textBox)).Text = ....
}
Nahoru Odpovědět
11.8.2012 16:28
New kid back on the block with a R.I.P
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na Michal Maršálek
David Jančík:11.8.2012 16:28

Co konkrétně nic nedělá? Postupuj jak jsem uvedl. Nejdřív si vypiš všechny komponenty daného kontejneru. Až je budeš mít tak si je vytřiď a nech ať se vypisují pouze textboxy, které splňují ten zadaný název. Až to budeš mít tak pak přistupuj k vlastnosti Text a tu modifikuj.
Pokud ti něco nepůjde napiš co konkrétně případně pošli ukázku kódu.

Nahoru Odpovědět
11.8.2012 16:28
Zapomeň, že je to nemožné a udělej to ;)
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na David Jančík
David Hartinger:11.8.2012 16:31

Název bych nekontroloval, prostě si do něčeho vloží jen ty, se kterými chce pracovat.

Nahoru Odpovědět
11.8.2012 16:31
New kid back on the block with a R.I.P
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na David Hartinger
David Jančík:11.8.2012 16:32

Pokud si to dal do samostatného kontejneru jak jsme psali a nemá tam jiné komponenty, pak samozřejmě nemusí.

Nahoru Odpovědět
11.8.2012 16:32
Zapomeň, že je to nemožné a udělej to ;)
Avatar
Michal Maršálek:11.8.2012 18:27

Mám to v TableLayoutPanel a v tom to nefunguje a píše to foreach statement cannot operate on variables of type 'System.Window­s.Forms.Table­LayoutPanel' because 'System.Window­s.Forms.Table­LayoutPanel' does not contain a public definition for 'GetEnumerator'
Asi tam udělám 100× if else. Vím, že je to hrozné, ale jsem opravdový začátečník a toto řešení je pro mě zatím dostačující. Díky za váš čas. :)

 
Nahoru Odpovědět
11.8.2012 18:27
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na Michal Maršálek
David Jančík:11.8.2012 18:33

Bože né :D
Tak se podívej do dokumentace:
http://msdn.microsoft.com/…ontrols.aspx

Nahoru Odpovědět
11.8.2012 18:33
Zapomeň, že je to nemožné a udělej to ;)
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Michal Maršálek
David Hartinger:11.8.2012 18:36

Poradili sjme ti a i jsme ti poslali kód. Když neřekneš co děláš ani nepošleš co ti nefunguje, tak to je potom problém. Dej si tam 100 ifelse, ale aby jsi se z toho pak nezbláznil :)

Nahoru Odpovědět
11.8.2012 18:36
New kid back on the block with a R.I.P
Avatar
Michal Maršálek:11.8.2012 18:57

Už jsem si psal skript, který mi to 100× vypíše abych to pak zkopíroval do kódu. :D Když v tom jsem se podíval sem a na tu dokumentaci a zjistil, že tam za to "TableLayoutPanel" musím dopsat ještě ".Controls". A funguje, je to přesně to, co jsem chtěl a potřeboval. Nedělám nic konkrétního, jen jsem tak přemýšlel jak by se to dalo udělat. Díky moc!!!

 
Nahoru Odpovědět
11.8.2012 18:57
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 17 zpráv z 17.