Body zdarma Java týden
Využij podzimních slev a získej od nás až 40 % bodů zdarma! Více zde
Pouze tento týden sleva až 80 % na Java e-learning!

Gascripe

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Hlavní částí tohoto programu jsou oblasti. Ty se editují úplně nahoře. Lze přidávat, editovat a mazat. Maže se následovně - klikněte na oblast a stisknte Delete... :) Edituje stiskem F2 (Musí být zvolena oblast!). Stějně tak i u sekcí a souborů. U nich však máte kromě standartních zkratek (N - nový, F2 - editace jména, Delete - smazání) i možnost využít ContextMenuStri­pu... Kliknutím na sekci se v okně vedle zobrazí její soubory. Soubory lze otevírat standartně - dvojklikem, či ContextMenuStri­pem... Pro Vaše pohodlí tu je i další možnost - můžete využít tlačítek dole... :) Vždy je třeba označit danou věc, jinak Vám to prostě nepůjde. Vše by mělo být pojištěno - kromě vstupu do složek v Aplikačních datech mimo program... Tedy až na hlavní složku - tu klidně smažte...

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Nyní jsem přidal možnost měnit barvy - jak pomocí brevných schémat, tak dialogem pro jednotlivé sekce. Pokud budete chtít ruční barevné úpravy resetovat - stačí vybrat jedno ze schémat.

Přidána možnost přetahovat libovolné soubory/složky. Lze s nimi manipulovat úplně stejně - navíc s možností dialogu "Open with". Ovšem za cenu neuhlídatelnosti - pokusím se vše pojistit, ale zatím je to nekryté - kolize stejných jmen (dojde k přepsání staršího souboru) a zapomenutí koncovky při editaci. Tak nezapomeňtě na koncovku při změně jména! (To vše se samozřejmě týká jen přetáhlých souborů...)


Galerie

Program byl vytvořen v roce 2012.

 

Stáhnout

Staženo 278x (202.04 kB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

 

Aktivity (1)

 

 

Komentáře

Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:26.9.2012 21:40

Zvenku hezké, chválím věci jako kontrolu jeslti neuzavírám neuložený skript atd. Zevnitř nějaké rozdělení do tříd, kód jsem důkladně nezkoumal. Mícháš zobrazení a logiku, všechny věci jako práce se soubory a výpočty by mělo být v jiných třídách, než věci jako showdialog atd. Podívej se na tutoriály tady.

Určitě by se hodilo zvýraznění textu, David Jančík tu psal teď tutoriál - http://www.itnetwork.cz/…highlighteru

Odpovědět 26.9.2012 21:40
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Čápka
matesax:26.9.2012 22:04

Já bych rád - dřív jsem se s tím piplal, ale problém je s použitím. Tedy nemám přístup k prvkům, do kterých chci vkládat data. Tedy musel bych psát návratové metody - a kód by tím byl mnohem delší - kdyby se jednalo o výpočet čísla algoritmem, bez problému hodím algiritmus do sólo třídy, vložím parametr při zavolání a co mi vyflusne někam uložím,... Ale když potřebuji nastavit určitou hodnotu Textboxu (cíleně pro daný element) - a mám to na 3 řádky... Možná se mýlím, tak mě pouč - jak to udělat jednoduše...

Co by jsi chtěl zvýrazňovat?

Přikládám novou verzi...

 
Odpovědět 26.9.2012 22:04
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Čápka
matesax:26.9.2012 22:11

Pardon - už chápu to s tím zvýrazňováním - vzal jsem to jako hotovou věc - že jsem to vyřešil tím editorem, kde si lze hrát skoro jako ve wordu - rád se do toho pustím... :)

 
Odpovědět 26.9.2012 22:11
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Čápka
matesax:27.9.2012 6:16

Toto jsou nejčastější funkce:

https://gist.github.com/3792112

Tedy jak píši nastavování hodnot elementům formu - to snad ani nejde udělat jako objekt...

 
Odpovědět 27.9.2012 6:16
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:27.9.2012 12:41

Těší mě, že máš zájem se zlepšit :)

První věc, teď jsem si teprve všiml toho VAR. Proboha, tohle slouží k něčemu úplně jinému, C# je silně typovaný jazyk, typy používej, tohle je opravdu špatné.

Podívejme se třeba na funkci EditSectionName:

private void EditSectionName()
{
    if (SectionViewer.SelectedNode != null)
    {
        var doc = Interaction.InputBox("Zadej nové jméno sekce.", "Change Name Dialog", Path.GetFileName(actualPath));
        var di = new DirectoryInfo(actualPath);

        if (!String.IsNullOrEmpty(doc))
        {
            var act = di.Parent.FullName + @"\" + doc;

            if (act != actualPath + @"\" + doc)
                di.MoveTo(NoExistName(act));
        }

        SectionViewerActualize();
    }
}

Pracuješ tam s nějakou vizuální komponentou, předpokládám, že tohle je v kódu formu. To je správně. Ale tato část:

var di = new DirectoryInfo(actualPath);

if (!String.IsNullOrEmpty(doc))
{
    var act = di.Parent.FullName + @"\" + doc;

    if (act != actualPath + @"\" + doc)
        di.MoveTo(NoExistName(act));
}

je již přeci logika. Ta bu se neměla míchat se vzhledovou částí aplikace. Uděláš si nějakou třídu, moc nevím jak to přesně funguje, ale tady děláš něco se sekcemi, tak třeba SectionManager? Tam dáš tuto metodu (ty var jsem dal pryč):

public function rename(string doc)
// btw proč se jmenuje nové jméno sekce doc?
{
    DirectoryInfo di = new DirectoryInfo(actualPath);

    if (!String.IsNullOrEmpty(doc))
    {
        string act = di.Parent.FullName + @"\" + doc;

        if (act != actualPath + @"\" + doc)
            di.MoveTo(NoExistName(act));
    }
}

Actualpath se asi používá častěji, bude to prostě atribut té třídy SectionManager. No a teď tohle zavoláš v té zobrazovací části:

private void EditSectionName()
{
    if (SectionViewer.SelectedNode != null)
    {
        string doc = Interaction.InputBox("Zadej nové jméno sekce.", "Change Name Dialog", Path.GetFileName(actualPath));
        sectionManager.rename(doc);
        SectionViewerActualize();
    }
}

Všimni si, že zobrazovací část říká co se má dělat, ale již tam není jak se to má dělat. Logika je schována v další třídě, kam patří.

Odpovědět 27.9.2012 12:41
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Čápka
matesax:27.9.2012 13:38

Pokud vím, tak var doplňuje typ podle pravé části - a je pro zkrácení zápisu - tedy proč bych jej neměl využívat?

Ale to je to o čem mluvím - používáš tam SectionViewer­.SelectedNode != null, ale v jiné třídě přeci nebudu k elementu SectionViewer mít přístup... Takže bych buď musel dělat mosty, nebo jak jsem psal, ale tak, či jiným způsobem to propojit - bude to pro mě náročněší...

Třeba zde bych musel udělat "get set" pro SectionViewer, ...

Editováno 27.9.2012 13:38
 
Odpovědět 27.9.2012 13:38
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Čápka
matesax:27.9.2012 13:51

Jo takhlen - už tě chápu - no ale i tak - kód tím bude delší... Uvidím sám - jdu na to...

Jo a doc se to jemnuje - jakože dočasný...

Editováno 27.9.2012 13:55
 
Odpovědět 27.9.2012 13:51
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:27.9.2012 14:09

Ne, var není ke zkrácení zápisu, tato konstrukce tam byla dodána pro úplně jiné účely, konkrétně pro zjednodušení datových typů při práci s databází. Takhle jen jdeš proti návrhu jazyka.

Odpovědět 27.9.2012 14:09
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Čápka
matesax:27.9.2012 15:15

Hotovo... Bude ti vadit projít si to? - mohu poslat jen cílený kód...

 
Odpovědět 27.9.2012 15:15
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:27.9.2012 15:29

Pošli sem tu část :)

Odpovědět 27.9.2012 15:29
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:27.9.2012 15:46

Aha, ty jsi to publikoval. No pořád nechápeš tu podstatu, je potřeba oddělit logiku od vzhledu. Vzhledem myslím to, s čím pracuje uživatel. Proto v té třídě nemá být ani:

string name = Interaction.InputBox("Zadej jméno nové sekce.", "Section Name Dialog", "NewSection");

To je přeci část uživatelského rozhraní, to patří ven. Metoda ve třídě má sežrat parametry a vyplivnout výsledek, nemá se již na nic ptát, od toho tu je to rozhraní venku.

Editováno 27.9.2012 15:46
Odpovědět 27.9.2012 15:46
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Čápka
matesax:27.9.2012 15:53

Ale ono to je v tom manageru...

private void SectionViewerActualize()
{
    FilesViewer.Items.Clear();
    SectionViewer.Nodes.Clear();

    if (!String.IsNullOrEmpty(actualArea))
        SectionViewer.Nodes.AddRange(new SpravaGascripe().CreateNodesArray(actualArea));
}

private void CreateSection()
{
    if (String.IsNullOrEmpty(actualArea))
        MessageBox.Show("Není vybrána žádná oblast!", "Kam s ní?");

    else if (sectionManager.CreateSection((String.IsNullOrEmpty(actualPath) || SectionViewer.SelectedNode == null || MessageBox.Show("Chceš vytvořit podsekci (ano), či novou hlavní sekci (ne)?", "Ověření", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.No) ? actualArea : actualPath))
            SectionViewerActualize();
}

private void EditSectionName()
{
    if (sectionManager.Rename(actualPath))
        SectionViewerActualize();
}

private void RemoveSection()
{
    if (SectionViewer.SelectedNode != null && sectionManager.Remove(actualPath))
    {
        actualPath = null;
        FilesViewer.Items.Clear();
        SectionViewerActualize();
    }
}

Kde to vidíš?

Editováno 27.9.2012 15:53
 
Odpovědět 27.9.2012 15:53
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:27.9.2012 15:56

Např. v SectionManager:

public bool CreateSection(string path)
        {
            string name = Interaction.InputBox("Zadej jméno nové sekce.", "Section Name Dialog", "NewSection");

            if (String.IsNullOrEmpty(name))
                return false;
            else
            {
                new DirectoryInfo(NoExistName(path + @"\" + name)).Create();
                return true;
            }
        }
Odpovědět 27.9.2012 15:56
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Čápka
matesax:27.9.2012 16:00

Ale to je již ta třída mimo - to mám udělat ještě další? :) Jo takhlen - mám dát parametr newName (string) - a ptát se při volání?

Editováno 27.9.2012 16:03
 
Odpovědět 27.9.2012 16:00
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Čápka
matesax:27.9.2012 16:14

Ještě něco - než to dám ke schválení?

 
Odpovědět 27.9.2012 16:14
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:27.9.2012 16:34

Aplikace má 2 vrstvy, v jedné jsou formy a jejich obsluha včetně dialogů a dalšími věcmi, se kterými uživatel pracuje. V druhé je jen logika. 1. vrstva vezme data od uživatele a předá je té druhé. Ta něco udělá a zas předá řízení té první, která ukáže výsledek uživateli.

Dáš tam parametr, přesně tak. To ActualFolder nebo jak se to jmenuje by mohla být proměnná té třídy, předpokládám, že se nemění, šla by nastavit při vytvoření.

Určitě jsem tam někde ještě viděl práci se stream a nad tím dialog. Si to projeď :)

Editováno 27.9.2012 16:34
Odpovědět  +1 27.9.2012 16:34
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Čápka
matesax:27.9.2012 16:51

No ta se mění vůbec ze všech nejvíce... :) Proto to je actualPath - aktuální - tedy je v ní cesta, kde zrovna uživatel je...

 
Odpovědět 27.9.2012 16:51
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na matesax
David Čápka:27.9.2012 17:02

Jo tak, můžeš jí tedy předávat parametrem nebo použít nějaký návrhový vzor, ale v tom nejsem tak dobrý, abych ti mohl radit, je to docela věda :)

Odpovědět 27.9.2012 17:02
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Čápka
matesax:27.9.2012 17:19

Update...

 
Odpovědět 27.9.2012 17:19
Avatar
lcet.m
Člen
Avatar
Odpovídá na David Čápka
lcet.m:14.1.2013 17:40

var není dynamické typování. Používá ho správně.

 
Odpovědět 14.1.2013 17:40
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 21 zpráv z 21.