Diskuze: Jak provést stejnou věc pro sto věcí ve formuláři najednou.
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 17 zpráv z 17.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
V php bych použil $("textBox".$i), ale jak na to v C#?
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ů.
A ten kód cos označil jako PHP je nesmyslný.
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.
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ý?
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]
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
Ano, myslel jsem to jako proměnnou, které bych změnil hodnotu.
Tvoje řešení jsem zkoušel, ale nic to nedělá.
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 = ....
}
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.
Název bych nekontroloval, prostě si do něčeho vloží jen ty, se kterými chce pracovat.
Pokud si to dal do samostatného kontejneru jak jsme psali a nemá tam jiné komponenty, pak samozřejmě nemusí.
Mám to v TableLayoutPanel a v tom to nefunguje a píše to foreach statement
cannot operate on variables of type 'System.Windows.Forms.TableLayoutPanel'
because 'System.Windows.Forms.TableLayoutPanel' 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.
Bože né
Tak se podívej do dokumentace:
http://msdn.microsoft.com/…ontrols.aspx
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
Už jsem si psal skript, který mi to 100× vypíše abych to pak zkopíroval
do kódu. 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!!!
Zobrazeno 17 zpráv z 17.