Avatar
roks
Člen
Avatar
roks:10.12.2013 21:06

Zdravím, mám statický List s názvom obrázky, je v ňom uložený názov obrázku, obrázok a priehľadná farba obrázku. Pri kliknutí na jeden button mám :

Bitmap bit;
                var obrazok = Program.Obrazky.SingleOrDefault(z => z.nazovObrazku == objekty.nazovObrazku);
                if (obrazok != null)
                {
                    bit = obrazok.obrazok;
                    bit.MakeTransparent(obrazok.farba);
                }

lenže toto spriehľadní aj originálny obrázok v liste, vedel by mi niekto poradiť, aby spriehľadnilo iba obrázok "bit" a nie aj obrázok z listu? :)

 
Odpovědět 10.12.2013 21:06
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na roks
Petr Nymsa:10.12.2013 21:08

Jaký je přesně důvod k statice ? A hlavně proč je ve třídě Program ?
Jinak tě odkážu sem http://www.itnetwork.cz/…ge-collector

Nahoru Odpovědět 10.12.2013 21:08
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
roks
Člen
Avatar
Odpovídá na Petr Nymsa
roks:10.12.2013 21:15

V programe je preto, lebo obrázky používam vo viacerých oknách... Static preto, lebo bez neho mi to nechce ísť ...
V programe mám zapísané :

private static List<Obrazok> obrazky = new List<Obrazok>();
internal static List<Obrazok> Obrazky
{
    get { return Program.obrazky; }
    set { Program.obrazky = value; }
}
 
Nahoru Odpovědět 10.12.2013 21:15
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na roks
Petr Nymsa:10.12.2013 21:18

Tohle smaž ! "Static preto, lebo bez neho mi to nechce ísť " tak jasně když je celá třída Program.cs statická.

Udělej si nějaký správce, který si bude předávat přes konstruktoru. ZDE se vůbec statika nehodí a nepoužije ! Jen tak mimochodem, víš co znamená internal ?

Nahoru Odpovědět 10.12.2013 21:18
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Petr Nymsa
Jan Vargovský:10.12.2013 21:25

To občas generuje IDE přes zkratku na vygenerování property :)

 
Nahoru Odpovědět 10.12.2013 21:25
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Jan Vargovský
Petr Nymsa:10.12.2013 21:28

Jo to je pravda a trochu nevidím důvod

Nahoru Odpovědět 10.12.2013 21:28
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Petr Nymsa
Jan Vargovský:10.12.2013 21:30

Resp. generuje to u statiky hlavně a to celkem dává smysl :)

 
Nahoru Odpovědět 10.12.2013 21:30
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Jan Vargovský
Petr Nymsa:10.12.2013 21:31

No tak to už zřejmě jo :) ale to co zde má uživatel roks, je hloupý nesmysl a zcela špatnej návrh

Nahoru Odpovědět 10.12.2013 21:31
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Petr Nymsa
Jan Vargovský:10.12.2013 21:34

Je to začátečník, ani nezná konvence, ani neumí pořádně pojmenovat instance ... :)

 
Nahoru Odpovědět 10.12.2013 21:34
Avatar
roks
Člen
Avatar
Odpovídá na Petr Nymsa
roks:10.12.2013 21:34

Nie neviem čo znamená international, mne to dávnejšie poradil jeden programátor tu na fóre, a odvtedy mi to išlo, tak som sa tým ďalej nezaoberal... Nechápem ako to myslíš, navrhnúť si správcu :/

 
Nahoru Odpovědět 10.12.2013 21:34
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na roks
Jan Vargovský:10.12.2013 21:37

Udělat si třídu Spravce a v ní mít normalně public List<T> Obrazky {get;set;} a pracovat s jednou instancí v aplikaci. A né to řešit statikou. Pokud nepracuješ s více projekty, tak je internal i public stejné, když pak budeš dělat s více projekty najednou, tak internal je viditelné jen v projektu (assembly) zatím co public všude.

 
Nahoru Odpovědět 10.12.2013 21:37
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na roks
Petr Nymsa:10.12.2013 21:38

Když se podíváš na zdejší tutoriály o OOP něco podobného se tam řeší :). Udělej si nějakou třídu, například SpravceObrazku, pro mě lepším názvem ImageManager a v něm budeš mít List<Obrazek>, následně si tuto instanci správce budeš posílat skrze konstruktory daných formulářů. Navíc díky tomuto návrhu můžeš Správci dát metody jako PřidatObrázek, SmazatObrázek, UložitObrázky, NačístObrázky,...
Každopádně doporučil bych ti se vrátit k seriálu a trošku si ujasnit co je co :)

  1. O co se snažíš ? jakou vytváříš aplikaci ?
  2. Pošli sem kod třídy Obrazek
Nahoru Odpovědět 10.12.2013 21:38
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
roks
Člen
Avatar
Odpovídá na Jan Vargovský
roks:10.12.2013 21:41

vďaka :)

 
Nahoru Odpovědět 10.12.2013 21:41
Avatar
Kit
Redaktor
Avatar
Odpovídá na Jan Vargovský
Kit:10.12.2013 21:42

Správce? To je nějaký antipattern?

Nahoru Odpovědět 10.12.2013 21:42
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Kit
Jan Vargovský:10.12.2013 21:43

Na rýpání nemám náladu, běž flámovat někde jinde. Díky.

 
Nahoru Odpovědět  +1 10.12.2013 21:43
Avatar
roks
Člen
Avatar
Odpovídá na Petr Nymsa
roks:10.12.2013 21:43

ďakujem pekne :)
za 1. robím rozhranie pre uľahčenie tvorby hier, taký primitívny Game Maker :)
za 2.

public string meno { get; set; }
        public Bitmap obrazok { get; set; }
        public Color farba { get; set; }
        public int id { get; set; }
        public Obrazok(string Meno, Bitmap Obrazok, Color Farba, int ID)
        {
            meno = Meno;
            obrazok = Obrazok;
            farba = Farba;
            id = ID;
        }
 
Nahoru Odpovědět 10.12.2013 21:43
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na roks
Petr Nymsa:10.12.2013 21:45

To vypadá v pořádku, jenom v C# se dodržuje konvence že každá vlastnost začíná velkým písmenem ;) Mrkni se schválně třeba na vlastnosti formuláře, Console, čehokoliv a uvidíš že veškeré vlastnosti jsou velkým, je to zvyk který je dobrý dodržovat :)

IMHO dělat nějaký správce na tvorbu her bez základních znalostí a zkušeností je dle mého názoru trošku špatný. Nechci ti brát nadšení ale asi z toho nevznikne nic moc extra, každopádně naučit se na tom dá pěkně :)

Nahoru Odpovědět 10.12.2013 21:45
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
roks
Člen
Avatar
Odpovídá na Petr Nymsa
roks:10.12.2013 21:47

Veď ide mi o to, aby som sa naučil :) a veľké písmená? tak to je len silou zvyku ;)

 
Nahoru Odpovědět 10.12.2013 21:47
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na roks
Petr Nymsa:10.12.2013 21:51

Spíše se obávám že se na tom mnoho nenaučíš, zkus si zdejší cvičení u OOP a když je zvládneš na výbornou zkus si třeba udělat v OOP klasického robota Karla, na pár příkazů ti bude různě chodit a pokládat bloky ;) Nevím co vše už jsi zvládl či ne :)

K těm počátečním velkým písmenům. Není to je o síle zvyku je to světová konvence která by se měla dodržovat. Tak jako následující

Třídy - první písmeno velké
Metody - to samé
Vlastnosti - to samé
proměnné - malé písmeno
Využívá se spíše CamelCase - tj NejakaMetoda, DruhaNejakaMetoda

Nahoru Odpovědět 10.12.2013 21:51
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
roks
Člen
Avatar
Odpovídá na Petr Nymsa
roks:10.12.2013 22:03

Tak vďaka za užitočné rady! :)

 
Nahoru Odpovědět 10.12.2013 22:03
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 20 zpráv z 20.