Avatar
Michal Maršálek:

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:

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

 
Nahoru Odpovědět 11.8.2012 15:11
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Michal Maršálek
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Michal Maršálek
David Čápka:

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

Nahoru Odpovědět 11.8.2012 15:14
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na Michal Maršálek
David Jančík [sczdavos]:

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
Čím více času dostaneš, tím méně ho máš.
Avatar
Michal Maršálek:

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
Odpovídá na Michal Maršálek
David Jančík [sczdavos]:

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
Čím více času dostaneš, tím méně ho máš.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Michal Maršálek
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Jančík [sczdavos]
Michal Maršálek:

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 Čápka
Tým ITnetwork
Avatar
Odpovídá na Michal Maršálek
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na Michal Maršálek
David Jančík [sczdavos]:

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
Čím více času dostaneš, tím méně ho máš.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na David Jančík [sczdavos]
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
David Jančík [sczdavos]:

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
Čím více času dostaneš, tím méně ho máš.
Avatar
Michal Maršálek:

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
Nahoru Odpovědět 11.8.2012 18:33
Čím více času dostaneš, tím méně ho máš.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Michal Maršálek
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Michal Maršálek:

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.