Diskuze: Práce s Form
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 24 zpráv z 24.
//= 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.
Jestli chápu dobře, tak vytváříš instanci formu2 ve formu1 (jestli ne, použij parametr metody)? Na to můžeš jít třeba tak, že:
public MujModel ModelDat {get;set;}
3. ve formu2 naplníš model
4. form2 zavři metodou Close(), ne Dispose
5. ve formu1 včetně práce a předání modelu může vypadat např.
následovně:
Form2 form = new Form2();
form.Model = new MujModel();
form.ShowDialog();
MujModel model = form.Model;
form .Dispose();
string praceSPromennouZModelu = model.MyProperty;
ZpracujModel(model);
(samozřejmě jsou i jiné způsoby a i kratší a pravděpodobně lepší způsoby zápisu, ale takto je to aspoň snad pochopitelné)
jde to vyřešit i tak, že instanci ListBoxu na Form1 předáš Formu2.
void Form2(Listbox l) {
this.l = l;
}
Form2 f = new Form2(this.nazevListboxu);
Teď jsem se teprve k tomu pořádně dostal a nerozumím tomu. můžeš podrobněji?
Příklad: mám na Form2 bankyDataGrid (Columns: Id, Banka a Kod), TextBoxy
(idTextBox, bankaTextBox, kodTextBox) a tlačítko (preberButton).
Na Form1 mám TextBoxy (idTextBox, bankaTextBox, kodTextBox).
Po select na bankyDataGrid se mi na Form2 načtou data do TextBoxů.
Po stisku tlačítka preberButton potřebuji, aby se data z Form2 (TextBox) přenesly do Form1 (TextBox).
Poradíš mi jak na to? Potřebuji jen ten převod z Form2 do Form1
Do události click na tlačítko preberButton dáš:
Form1 f = new Form1(idTextBox.Text, bankaTextBox.Text, kodTextBox.Text);
f.Show();
a do Form1
//v závorce je konstruktor, který přijímá argument z Form2
public Form2(int id, string banka, string kod) //za předpokladu, že id je skutečně číslo můžeš dát int
{
InitializeComponent();
//inicializace argumentů předaných z Form2
idTextBox.Text = id;
bankaTextbox.Text = banka;
kodTextBox.Text = kod;
}
taky jsem až dnes pochopil, jak to vlastně funguje...
a jakou chybu konkrétně ti to píše? Máš v tom Form1 napsáno :
public Form1(int id, string banka, string kod) //za předpokladu, že id je skutečně číslo můžeš dát int
{
InitializeComponent();
//inicializace argumentů předaných z Form2
idTextBox.Text = id;
bankaTextbox.Text = banka;
kodTextBox.Text = kod;
}
?
tam je sice chyba, ale není tam popis o jakou chybu se jedná...
edit: sorry, nekoukl jsem se až dolů.
ale to píše, když nemáš na tom Form1 přijímání těch parametrů
nastaveno
public Form1(int id, string banka, string kod)
V té mé první odpovědi jsem napsal sice dobře, že to máš napsat do Form1, ale pak jsem špatně uvedl
public Form2(...
Omlouvám se za mystifikaci
Už to funguje. Nicméně Form1 je již otevřen a otevírá se znovu, což není dobré. Potřeboval bych, aby se Form2 zavřel (to není problém) a data se zobrazila ve Form1, když se Form2 zavře. Jak to udělat?
Kdy se ti otevře ten Form1 poprvé a hlavně proč?
Form1 se otevírá při spuštění a Form2 otevírám z něj. Možná to dělám složitě, ale začínám a asi jsem si ukousl velké sousto.
Jedná se práci s databází kde data jedné tabulky (např. Firma) doplňuji z jiné tabulky (např. Banky). Ve Form1 mám načtenou tabulku Firma a ve Form2 vybírám banku, kterou následně uložím do firmy.
Taky se v C# teprve učím, ale pokud ten Form1 je jako výchozí při
spuštění, tak ho program bere jako "hlavní" a při jeho zavření se
ukončí aplikace...
Kolik se ti tam vyskytuje Formů celkem? Nevyplatilo by se udělat z toho
jednoho MDI kontejner jako hlavní a ty ostatní z něj otevírat jako
podřízené formy? Pak by tento problém odpadl, protože ten Form1(s firmou)
můžeš při otevření Form2 zavřít a pak už to funguje, jak jsem popsal
výše...
Taky jsem nad tím uvažoval, v podstatě by to šlo, ale těch TexBoxů, přes které ukládám data do firmy je více a do nich potřebuji načíst data z více tabulek (jednatel, psč, zakázka, objednávka a pod). To bych musel pro každé nové načtení dělat Update tabulky a načítat po částech. Ideální je do všech TextBoxů postupně načíst data ze všech potřebných tabulek, doplnit o vpisovaná data a uložit. Stejně to funguje účetnictví, které jsem si koupil.
Asi jsem nějak nepochopil: "...TexBoxů, přes které ukládám data do
firmy je více a do nich potřebuji načíst data z více tabulek..." Ukládáš
data z jiných tabulek do tabulky Firmy? Pokud máš více tabulek, které jsou
na sobě nějak závislé, je lepší je spojovat v tzv. propojovací tabulce,
kde budou v podstatě jen klíče jednotlivých řádků z těch tabulek...
Jinak budeš mít spoustu duplicitních dat a pak se v tom nakonec bude hodně
těžké orientovat. Zárověň když provedeš změnu v nějaké tabulce, tak
tu změnu budeš muset udělat i v dalších tabulkách a z toho by ses mohl pak
opupínkovat.
Při použití propojovací tabulky provedeš změnu jen jednou a automaticky se
ti promítně i do ostatních tabulek...
Doufám, že sem to správně pochopil:
Nemusel bys používat 2 formuláře, stačil by ti jeden, který něco zobrazuje a má velikost při načtení aplikace-> width: 500; height: 500; někde do této velikosti dáš button a když na něj klikneš formulář se ti zvětší na veliskost-> width: 900; height: 500; na pozicích větších jak 500 máš volné místo kde můžeš dávat editační prvky.
Suma sumárum, při spuštění aplikace editační prvky neuvidíš, jakmile
klikneš na tlačítko, zvětší se ti formulář, kde editační prvky jsou
(po dalším kliku na
tlačítko se formulář zase zmenší)
Mám tabulku Firmy kde mám např: Id, Ic, Firma, Ulice, Obec, CastObce,
PscId, Psc, BankaId, Banka, KodBanky, CisloUctu a Telefon.
Dále mám tabulku Banky kde mám: Id, Banka, Kod.
Dále mám tabulku Psc kde mám: Obec, CastObce, Psc.
Na Form1 mám TextBoxy: Id(visible = false), ic, firma, ulice, obec, castObce, pscId(visible = false), psc, bankaId(visible = false), Banka, kodBanky, cisloUctu a telefon.
TextBoxy (ic, firma, ulice, cisloUctu, a telefon) vypíši ručně.
TextBoxy (pscId, obec, castObce a psc) chci načíst z tabulky Psc (Form3)
TextBoxy (bankaID, banka a kod) chci načíst z tabulky Banky (Form2)
Obsah všech TexBoxů uložím jako novou firmu do tabulky Firma.
Možná je to blbě
Když se na ten formulář podíváš lépe, pak zjistíš, že třeba kód
banky nebo PSČ si můžeš vybrat z číselníku tzn., že banka nebo PSČ jsou
uloženy v jiných tabulkách (číselnících) a do formulářů se jen
načítají. Kdyby to tak nebylo a např. banka změnila kód (je to
samozřejmě jen jako příklad), musel bys ten kód měnit u všech záznamů v
tabulce firma. Při tisíci záznamů je to na sebevraždu.
Do tabulky firmy je uloženo jen ID té banky a číslo účtu...
Tak na tohle je určitě lepší mít 2 formuláře...
K té změně záznamů tohle by se dalo udělat SQL příkazem update ne? Nemusel by nic měnit po jednom:)
Mrkni se, kam ti to "účetnictví" ukládá data a pořádně si prohlídni
strukturu té databáze, z toho bys měl pochopit, jak to funguje...
Zobrazeno 24 zpráv z 24.