• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    TENCOKACISTROMYProgramovani v C#, F# a dalsich jazycich pro .NET, Mono a ostatni CLI implementace
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    CERMINEK: Poradit neni problem. Od toho to tu je.
    Ale zkousku delej sam za sebe. K cemu by to pak bylo? Nepodporuju devalvaci akademickejch titulu, i kdyz mi jejich koncept nevyhovuje.
    CERMINEK
    CERMINEK --- ---
    TENCOKACISTROMY: Super! Fachčí to...

    Jinak ale doufám, že zítra u zkoušky bude nějaké ze zadáních, které byly v minulosti. Mohl bych Vás ale někoho požádat, zda-li byste nebyli zítra mezi 9:00 a 12:00 on-line pro případný help? S .NET se fakt nekámoším a zkoušku bych rád měl z krku :D
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    TENCOKACISTROMY: oprava - misto:
    public class MyClass {
        public List<int> Numbers {get; private set; }
    

    ma byt
    public class MyClass {
        public BindingList<int> Numbers {get; private set; }
    
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    CERMINEK: Pouzij "BindingList<T>" misto "List<T>". Nachazi se v namespacu "System.ComponentModel".

    public class MyClass {
        public List<int> Numbers {get; private set; }
        
        public MyClass() {
            var rnd = new Random();
            var capacity = 10;
            this.Numbers = new List<int>(capacity);
            for(int i = 0; i < capacity; i++) {
                this.Numbers[i] = rnd.Next(0,100);
            }
        }
    }
    
    // .... ve formu
    private MyClass asdf = new MyClass();
    public Form1() {
        asdf.Numbers.ListChanged += Numbers_ListChanged;
        this.RefreshLabel();
    }
    void Numbers_ListChanged(object sender, ListChangedEventArgs e) {
        this.RefreshLabel();
    }
    void RefreshLabel() {
        this.label1.Text = string.Concat(this.asdf.Numbers.ToArray());
    }
    void button1_Click(object sender, EventArgs e) {
        this.asdf.Numbers.Add(int.Parse(this.textBox1.Text));
    }
    


    Pisu to z hlavy, mozna tam je nekde preklep.
    CERMINEK
    CERMINEK --- ---
    TENCOKACISTROMY: Díky, už to valí...

    Jen mám další dotaz. V tom formu mám label, kam si vypisuju metodou všecha čísla z toho listu. Je nějaké řešení, jak nadefinovat tomu labelu, aby se při každé změně toho listu aktualizoval text v tom labelu?

    Zatím to mám jen pří form_Load a to není moc praktické ani elegantní..

    private void Form1_Load(object sender, EventArgs e)
    {
    histogram h = new histogram();
    h.vypiscisla();
    lblVypis.Text = h.vypiscisel;
    }
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    THEBYS: To musi vyhodit chybu (NullReferenceException). Field "mujSeznam" bude dobe behu konstruktoru vzdycky null.
    CERMINEK: Zkus to takhle:
    public class MyClass {
        public List<int> Numbers {get; private set; }
        
        public MyClass() {
            var rnd = new Random();
            var capacity = 10;
            this.Numbers = new List<int>(capacity);
            for(int i = 0; i < capacity; i++) {
                this.Numbers[i] = rnd.Next(0,100);
            }
        }
    }
    
    // .... ve formu
    private MyClass asdf = new MyClass();
    void button1_Click(object sender, EventArgs e) {
        this.asdf.Numbers.Add(int.Parse(this.textBox1.Text));
    }
    
    THEBYS
    THEBYS --- ---
    Třída bude vypadat nějak takhle: http://pastebin.com/xJ0dQtiS
    a zavoláš to tam kde to máš instancovaný jako NazevMojiInstance.PridejDoSeznamu(69);
    Kdyby něco nešlo klidně napiš.
    CERMINEK
    CERMINEK --- ---
    Ahoj mám dotaz... značně elementární a značně lamácký, ale nevím si s tím rady...

    Mám vytvořenou třídu, ve které mám public vytvořený list. Při Form_Load vytvořím novou instanci třídy, kdy v defaultním konstruktoru naplním list v té třídě náhodnými čísly. Do listu chci ale přidávat i další čísla z textboxu. Mám ošetřené načítání a přetypování čísel z textboxu po stisku tlačítka, ale zaboha nemůžu přijít na to, jak to číslo přidat do toho listu, resp. jak vyvolat metodu té třídy, kteá to přidání provede...

    Zkouším googlit, ale asi volím špatná hesla pro hledání.

    Pomůže někdo prosím?
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    JACHYMKO: To by asi slo. Jeste budu muset zaridit, abych rozlisil zmenu toho obsahu na zaklade ty puvdoni akce. Cili jestli to udelal uzivatel a nebo ja. To bude chutovka :P.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    Priklad, jak ta kompozice UI muze vypadat:
    + Window
    |-+ nejakej ovladaci bar
    |-+ content kontajner (zde bud budu prepinat jiny control, nebo na nem budu volat back/forward)
      |-+ content (bud browser, nebo custom usercontrol. pro tento pripad usercontrol)
        |-+ content (napr. nejaky tab-control, ktery ma reagovat na zpet/vpred prepinanim tabu jak je uzivatel klikal)
        |-+ content (napr. nejaky jiny tab-control)
    


    Jak urcim pri "back", kterymu z tech tab-controlu mam zavolat "back/forward"? To budu muset mit nejakou nadrizenou navigation service, ktera na zaklade udalosti zmen tech tabu bude muset sestavovat nejaky ty Uri, a za nich to pak budu muset dekodovat predpokladam.

    Takhle jsi to myslel?
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    JACHYMKO: No jasne, ale kdyz budu mit ty views uvnitr views uvnitr views (atd...) a ty budou mit teda tu svoji navigation service. Jak najdu tu spravnou navigation service, kde mam volat back/forward?
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    JACHYMKO: Jak pak ale nejdu tu spravnou nestovanou navigation service?
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    JACHYMKO: Ten je bohuzel malo ohebnej. Chci tam mit vlastni browser, v nem navigovat vpred/vzad. Navic mi ten Frame zobrazuje tu navigacni listu, kterou nechci.

    Navic ja ty views mam hierarchicky bohuzel. Takze tam budu mit nejakou instanci a v ramci ty instance potrebuju taky resit zpet/vpred.

    A nebo jsem tu NavigationService tak uplne nepochopil a skryva prede mnou svoje ficury :).
    ANDY_WARHOL
    ANDY_WARHOL --- ---
    JACHYMKO: no prave,proto sem se snazil doporucit trochu jinej pristup, obejit to tim, ze si budes uchovavat jen to nejnutnejsi aby si mohl znova nahodit co si tam mel.

    to problem neni, jen to je treba dobre navhrnout aby to bylo flexibilni.
    ANDY_WARHOL
    ANDY_WARHOL --- ---
    JACHYMKO: no a nebude to zbytecne zasirat spoustu pameti ?
    ANDY_WARHOL
    ANDY_WARHOL --- ---
    JACHYMKO: jenze to nevyresi ty jeho kontroly.
    ANDY_WARHOL
    ANDY_WARHOL --- ---
    TENCOKACISTROMY: ja ti rozumim, ale asi ti to blbe vysvetluju :)
    ale v podstate des tou spravnou cestou
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    ANDY_WARHOL: Asi si nerozumime :).
    Muj pozadavek je takovej, abych mohl na akce "navigovat, zpet, vpred" reagovat flexibilne. Nechci aby to bylo zavisly na tom jestli se budu navigovat v browseru a nebo ve vlastnich wpf controlech. Coz znamena, ze jednak budu muset udelat nejakej kontajner, kde budu trzet tu historii a "budoucnost" pro zpet/vpred. A zaroven budu muset vytvorit nejakej subsystem pro zajisteni toho zobrazovani contentu (vcetne toho, abych se objevil na spravne odscrollovanym seznamu).

    A tak se ptam, jestli vas nekoho nenapada jak to spravne udelat nebo jestli neco takovyho dokonce i neznate. Zatim nejbliz mi prijde memento pattern, kterej v sobe ma polozky s metodama undo/redo (cili zpet/vpred). Nechci vymejslet kolo, potrebuju aby to bylo funkci a mam na to tak den casu.
    ANDY_WARHOL
    ANDY_WARHOL --- ---
    TENCOKACISTROMY: jde o to co myslis tim obecny a univerzalni
    jestli v ramci tve aplikace nebo sveta a tak vubec...
    jestli to myslis tak, aby to bylo univerzalni v ramci tvoji aplikace, tak s tim nevidim problem, muzes to nadesignovat tak, aby te v budouci implementaci nic neprekvapilo a nemel si problem s tim to rozsirovat podle potreby
    druha tvoje otazka je opravdu jen o implementaci, samozrejme ze muzes pouzivat udalosti, na tom je to wpf postaveny, tedy pokud pouzivas klasicky MVVM.
    jestli sem spravne pochopil ten pattern (ja vyuzivam jen zakladni, zbytek mi prijde zbytecnej se ucit, protoze to vymyslim sam rychleji nez hledat z existujicich, takze sem se na to musel mrknout), tak tam ukladas celej ten objekt, ale to je podle me zbytecny - to sem myslel tim zjednodusenim. ty nemusis preci ukladat celou strukturu view ve view aby si se k tomu pak dostal, ty si tu strukturu muzes predstavit jako stromecek a ten si ukladat. a to bude mnohem min narocnejsi. ale jak rikam, ja nevim jak tu aplikaci mas postavenou takze to je takovy obecny tlachani.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    ANDY_WARHOL: Jde to zjednodusit i pro obecny pripad? Vcetne toho, ze potrebuju aby to bylo schopny fungovat s asynchronnim nacitanim? Tim mam na mysli - nanaviguju na "http://neco.nekde/asdf/123.aspx", to nacitani mi bezi asynchronne a pak dotanu jen event o (ne)uspesnym nacteni.
    ANDY_WARHOL
    ANDY_WARHOL --- ---
    TENCOKACISTROMY: no jasne, neco takovyho se urcite pouzit da.
    ovsem de to i zjednodusit.
    Kliknutím sem můžete změnit nastavení reklam