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.
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