IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Michal Štěpánek:3.5.2014 10:13

Existuje něco podobného v C# jako je ve VB.NET soubor Module, čili nějaký prostor na ukládání veřejných proměnných?
Snažím se naučit programování v C# a nevím, jak se toto v C# řeší...

Odpovědět
3.5.2014 10:13
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Luboš Běhounek Satik:3.5.2014 10:32

Veřejným proměnným se snaž vyhnout, pokud to jde.
To co hledáš je asi klíčové slovo static .

Nahoru Odpovědět
3.5.2014 10:32
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Luboš Běhounek Satik
Michal Štěpánek:3.5.2014 10:45

Ve VB.NET jsem si do toho uložil např

Dim email As String

a pak jsem to mohl použít kdekoliv a nemusel jsem to v každém formu znovu deklarovat...

Nahoru Odpovědět
3.5.2014 10:45
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Luboš Běhounek Satik:3.5.2014 10:55

třeba takhle:

internal static class Spolecne
{
  public const String Email = "[email protected]";
  ...
}

a pak třeba výpis do konzole by byl takhle:

Console.Write(Spolecne.Email);
Nahoru Odpovědět
3.5.2014 10:55
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Luboš Běhounek Satik
Michal Štěpánek:3.5.2014 11:04

takhle by to šlo, ale mě šlo spíš o to, abych si tu "proměnnou" mohl plnit z nějakého formu, třeba z textboxu a pak to použít v druhém formu jako "vstup"...
Doufám, že jsem to napsal tak, aby se to dalo pochopit... :-)

Editováno 3.5.2014 11:05
Nahoru Odpovědět
3.5.2014 11:04
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Luboš Běhounek Satik:3.5.2014 11:12

Když by jsi tu proměnnou chtěl měnit, tak stačí jen odebrat to slůvko const a můžeš ji měnit.

Ale v případě, co popisuješ, by bylo správné řešení ty data předávat přímo tomu druhému formuláři - ideálně v konstruktoru (pokud ten druhý formulář je teprve vytvářen) a nebo funkcí, pokud už existuje.

Nahoru Odpovědět
3.5.2014 11:12
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Luboš Běhounek Satik
Michal Štěpánek:3.5.2014 11:22

V podstatě mi jde taky o toto:
Mám form (např.: SeznamForm), v něm je DataGridView s daty z databáze a v druhém formu (např.: DetailForm) jsou jednotlivé textboxy, které jsou plněny daty z toho SeznamForm(z DGV), abych data mohl editovat. Jak toto provedu v C#?
Ve VB.NET jsem se jednoduše v DetailForm odkázal na SeznamForm.Da­taGridView a vybraný řádek, ale v C# toto takhle nefunguje...
Zkoušel jsem to právě přes nějakou proměnnou, která by se plnila podle toho, který záznam bych vybral, ale to taky neumim.
Už jsem z toho srnec, daněk, jelen... :-)

Editováno 3.5.2014 11:24
Nahoru Odpovědět
3.5.2014 11:22
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Luboš Běhounek Satik:3.5.2014 11:39

Máš dvě možnosti - jednodušší, ale z pohledu OOP prasárna je, že vlezeš do SeznamForm.De­signer.cs a ten DGV si nastavíš na public (případně i static, pokud v DetailFormu na tu instanci SeznaFormu nevidíš).

Ta správná je, že pokud DetailForm teprv vytváříš, tak mu do konstruktoru přidáš parametr toho řádku z DGV - předpokládám, že je to asi typ DataGridViewRow) a ten pak v tom konstruktoru zpracuješ.

Případně pokud ten DetailForm má umět i mazání/vytváření apod., tak si můžeš předávat do DetailFormu celý GridView.

Nahoru Odpovědět
3.5.2014 11:39
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Luboš Běhounek Satik
Michal Štěpánek:3.5.2014 12:24

Radši bych použil ten správný způsob, mohl bys prosím uvést nějaký příklad toho správného zápisu? Jak "předat" do DetailFormu celý DGV? Teoreticky vím, jak by to mělo systémově fungovat, ale prakticky vůbec netuším, jak to napsat...
Edit:
Chtěl bych, abych po vybrání řádku a stisknutí tlačítka viděl v DetailForm jednotlivé položky vybraného řádku...

Editováno 3.5.2014 12:26
Nahoru Odpovědět
3.5.2014 12:24
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
alfonz
Člen
Avatar
Odpovídá na Michal Štěpánek
alfonz:3.5.2014 12:44

Veřejné proměné by se v programu neměli vůbec vyskytovat, vždy by měli být dostupné jen přes metody. Případně u vlastností jen přes gettery a settery.

Nahoru Odpovědět
3.5.2014 12:44
lmao
Avatar
Odpovídá na Michal Štěpánek
Luboš Běhounek Satik:3.5.2014 12:48

Nezkoušel jsem to, takže tam může být nějaký překlep nebo se nějaká funkce může jmenovat trochu jinak, ale snad to z toho půjde pochopit :)

DetailForm:
Vytvoř si DetailForm, naházej si na něj ty controly pro výpis těch různých položek a konstruktoru přidej parametr typu DataGridViewRow nebo jak se jmenuje.

Ještě do toho DetailFormu přidej proměnnou, kde si budeš udržovat ten řádek - třeba něco jako

private DataGridViewRow data = null;

a v tom konstruktoru mu přiřaď to, co ti přišlo v tom parametru.

public DetailForm(DataGridViewRow dataRow)
{
  this.data = dataRow
}

Pak tam ještě připiš kód, co ti to z toho DataGridViewRow data načte do těch controlů - ideálně asi do eventu OnLoad.

Pak si obsluž tlačítko na uložení těch dat - aby to zase všechny změny uložilo do toho data a tlačítko storno, co jen ten formulář zavře (případně se předtím ještě zeptá, jestli nechce uložit změny).

SeznamForm:
při kliku na Editovat (nebo jak to tam máš)

DetailForm f = new DetailForm(mujDataGridView.SelectedRows[0]); // zavola konstruktor detailformu a jako parametr mu preda vybrany radek
f.ShowDialog();
Nahoru Odpovědět
3.5.2014 12:48
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Luboš Běhounek Satik
Michal Štěpánek:3.5.2014 12:53

díky, vyzkouším... :-)

Nahoru Odpovědět
3.5.2014 12:53
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Michal Žůrek - misaz:3.5.2014 13:05

Module je statická třída

Module Nazev
    Public Dim x = 5
End Module
static class {
    public static int x = 5;
}
 
Nahoru Odpovědět
3.5.2014 13:05
Avatar
Odpovídá na Michal Žůrek - misaz
Michal Štěpánek:3.5.2014 14:07

a ten

static class {
    public static int x = 5;
}

mám dát do čeho?
Našel jsem tam něco jako module (aspoň si to myslím) "CodeFile.cs", ale nevím, jestli je to ono...

Nahoru Odpovědět
3.5.2014 14:07
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Michal Žůrek - misaz:3.5.2014 15:23

No dáš to jak u modulu do stejnojmenného souboru s příponou cs.

 
Nahoru Odpovědět
3.5.2014 15:23
Avatar
Nahoru Odpovědět
3.5.2014 16:05
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Michal Štěpánek:3.5.2014 16:07

Hurááááá, konečně jsem pochopil (já patupák), jak se v C# předávají hodnoty z jednoho formu do druhého... Juchůůůůůů :-)

Nahoru Odpovědět
3.5.2014 16:07
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Luboš Běhounek Satik:3.5.2014 16:14

Jak jsi to nakonec udělal? Přes konstruktor nebo prasácky? :D

Nahoru Odpovědět
3.5.2014 16:14
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Luboš Běhounek Satik
Michal Štěpánek:3.5.2014 19:56

Konečně jsem pochopil, jak to funguje přes ten konstruktor, kam co napsat, takže přes konstruktor...
Díííííííííííí­ííííííky :-)

Nahoru Odpovědět
3.5.2014 19:56
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
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 19 zpráv z 19.