Zdravím,
představte si program kde jsou dva textboxy vedle sebe, jeden určuje cenu a druhý počet kusů. Pomocí buttonu se dá vytvořit nový řádek kde budou zas dva textboxy (TextBox cena = new TextBox (), TextBox ks = new TextBox()) . Chci se zeptat zda je možné a jak násobit mezi sebou jednotlivé řádky (tzn. cena*počet kusů). Umím nalézt třeba max. cenu nebo max. počet kusů pomocí pole, ale nevím zda si C# uvědomuje pořadí jednotlivých textboxů. Nepotřebuji to pro nekonečnou řadu a tak mě napadlo, že bych si třeba ty textBoxy už připravil a nějak je zakryl a po zmáčknutí buttonu by se vždy jeden řádek od kryl.
Předem dík za radu.
Fórum › .NET
Nasobení nových textboxů
Teoreticky by se to dalo řešit následovně :
Existuje kolekce prvků formuláře, pokud si textboxy, které přidáváš na formulář rozumně pojmenuješ (např. Textbox pro cenu jako txtCena1), dá se k nim pak přistupovat jako k prvkům této kolekce a funkcí Parse, popř. TryParse třídy Int, nebo jiné třídy (pokud chceš i desetinná čísla), kde předáš jako argument textbot.Text to narvat do proměnný a vynásobit, popř. pak zobrazit výsledek v jiném Controlu.
Něco podobného jsem už řešil, ale nejsem doma, jinak bych ti sem hodil i ukázku.
takže t akolekce Controls na formuláři je obsažená v this.Controls, k jednotlivým položkám kolekce se přistupuje stejně jako v jiné kolekci pomocí indexu, např. this.Controls[1], nebo pomocí jeho jména, např. this.Controls["cena3"]. Pokud znáš jméno textboxu, což bys měl, protože ho zadáváš při vytvoření, je jednoduché vytáhnout do proměnný číslo v jeho Textu. Nevim přesně, jak funguje program a kam se vypisujou výsledky, popř. jestli je možné mít dohromady textboxy prázdné i vyplněné dohromady, pokud ano, pak se dá pro každej Control zjistit hodnota a vypočítat pouze ty, který sou vyplněný : např.
foreach (Textbox políčko in this.Controls) //projde všechny Textboxy na formuláři
{
if (podmínka pro vyplnění, např. políčko.Text.Length>0, popř. v kombinaci s názvem)
{
tady funkce, co např. zjistí jméno políčka a přiřadí správnej Textbox s počtem k ceně
vypočítá se součin a zobrazí se někde
}
}
je potřeba samozřejmě ošetřit případy, kdy je vyplněná cena a není počet apod.
Na bližší podrobnosti bych potřeboval bližší popis toho, co to má dělat a jak to má dělat, ale snad to pro inspiraci bude stačit takhle.
Jenom bych potřeboval vědět, jak to funguje (moje představa : na formuláři sou 2 textboxy a tlačítko, uživatel vyplní čísla v textboxech pro cenu a počet a zmáčkne tlačítko, vypočte se to a výsledek se někam zobrazí - asi na label, a zobrazí se další dva textboxy, které jsou prázdné a připravené pro zadání, uživatel vyplní a stiskne zase tlačítko atd., ale možná, že si uživatel může naklikat prázdnejch textboxů 10 a pak je editovat a výsledky zobrazovat při opuštění textboxu počet).
pokud to bude první možnost :
předpoklad : jména textboxů : Cena0,Cena1,Cena2..., Počet0,Počet1,Počet2..., proměnná int, která se zvyšuje s klikem
Funkce na button1.click() :
private void button1_Click(object sender, EventArgs e)
{
string cena = "Cena" + i.ToString();
string počet = "Počet" + i.ToString();
int výsledek = Int16.Parse(this.Controls[cena].Text) * Int16.Parse(this.Controls[počet].Text);
this.label1.Text = výsledek.ToString();
i++;
//tady udělat nebo zviditelnit nový textboxy se jmény o jedno číslo vyšší
}
nemám možnost to momentálně odzkoušet, a nikdy jsem nepotřeboval vytvářet komponenty za běhu aplikace, takže nevim, jak to bude fungovat (pokud budou předpřipravený a bude se nastavovat jenom visible na true, tak by to fungovat mělo), dneska se ke kompu už nedostanu, ale mrku eště na to, zatim to ber spíš jako inspiraci k dalším průzkumům.
Mozna nezapadnu do diskuze, ale prijde mi ve vysledku jednodussi pouzit DataGridView (nebo nejaky hezci grid) a do nej pridavat radky. Eventuelne by mohl mit tri sloupecky - tedy i pro vysledek.
Je nejaky duvod proc by dynamicke pridavani TextBox-u bylo lepsi ?
já se snažil to udělat trochu jinak, ale ve finále jsem se rozhodl netrápit se s tím a prostě jsem to udělal díky visible true :smile1: . Budu tam mít spoustu jiných problémů, takže tohle udělám jednoduše. Teď mě čeká vytvoření databáze a celkovej výstup chci mít v excelu. Ten excel mi už běhá jen budu muset pořešit jak formátovat buňky (tučná písmena, rozšířit sloupec, atd.).
Díky za rady, já jdu dál válčit.
Zjistit počet nových příspěvků
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa































Uživatelé prohlížející si toto vlákno
Podobná vlákna
C# vytváření nových labelů — založil Tomas491
Dlouhý start nových XP — založil Tax
Otváranie nových formov — založil Trebor
Dlouhý start nových XP — založil Tax
Instalace nových komponent — založil Majlow
Moderátoři diskuze
TIP: Přetáhni ikonu na hlavní panel pro připnutí webu



Nahlásit jako SPAM
IP: 62.4.113.–
Návštěvník
Stálý člen
Expert

