Diskuze: Odkládací prostor v C#

C# .NET .NET (C# a Visual Basic) Odkládací prostor v C# American English version English version

Avatar
Michal Štěpánek:

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):

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
:)
Avatar
Odpovídá na Luboš Běhounek (Satik)
Michal Štěpánek:

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):

třeba takhle:

internal static class Spolecne
{
  public const String Email = "bla@bla.bla";
  ...
}

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

Console.Write(Spolecne.Email);
Nahoru Odpovědět 3.5.2014 10:55
:)
Avatar
Odpovídá na Luboš Běhounek (Satik)
Michal Štěpánek:

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):

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
:)
Avatar
Odpovídá na Luboš Běhounek (Satik)
Michal Štěpánek:

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):

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
:)
Avatar
Odpovídá na Luboš Běhounek (Satik)
Michal Štěpánek:

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
Odpovídá na Michal Štěpánek
Denis Homolík (Alfonz):

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
Vše je možné, dokud si to myslíte!
Avatar
Odpovídá na Michal Štěpánek
Luboš Běhounek (Satik):

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
:)
Avatar
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):

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
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na Michal Žůrek (misaz)
Michal Štěpánek:

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):

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

Nahoru Odpovědět 3.5.2014 15:23
Nesnáším {}, proto se jim vyhýbám.
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:

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):

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

Nahoru Odpovědět 3.5.2014 16:14
:)
Avatar
Odpovídá na Luboš Běhounek (Satik)
Michal Štěpánek:

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.