Tema: Re: Visual studio 5 ir modaline forma
Autorius: Jornada Del Muerto
Data: 2010-10-27 16:36:57
    Jei labai jauciasi ant greiciu tai gali tada gal ir laikyt atmintyj, kad ir toje pacioje klaseje sukurt statini memberi saugot tos klases objektui ir 1 statine startavimo funkcija. paprastai statines statinio kintamojo tikrai nenaikins GC, bet cia galima sakyt atbulas anam variantui variantas :)  pvz:

public class ManoKlase {

    static ManoKlase _Objektas = null; // c# jeigu nenurodomas access modyfer (t.y. public, private, protected, internal ir pan.) tai pagal nutylejima tai buna private

    /* Statinis start metodas toje pacioje klaseje inicializuojantis klases objekta - tavo atveju forma su tam tikrais parametrais */

    public static [returnType] Start (...parametrai...) {    // [returnType] jeigu reikia cia aprasai duomenu tipa koki grazinti, dialogam as paprastai dedu bool - priklausomai ar paspausta YES|OK/NO|Cancel

        // jeigu ner objekto
        if(_Objektas == null ) {
            // sukuriu objekta
            _Objektas = new _Objektas(...parametrai...);
        }
        // objektas yra
        else {
            // priskiriame parametrus jau esamam objektui, jie galbut pasikeite
            _Objektas.Memberis = ...parametrai...
        }

        // cia vyks modalinio dialogoo rodymas
        // Paimu true arba false priklausomai ar paspausta OK ar ne
        IF   _Objektas.ShowDialog() == DialogResult.OK THEN
            ' Paspausta OK
            return _Objektas.[FilePath];    // daleiskim musu returnType yra string, jeigu grazinama null reiskia nebuvo spausta ok, jeigu tekstas reiskia tai failas/katalogas

                        ' cia gali dar tikrinti ar realiai egzistuoja failas
            FileInfo file = new FileInfo(_Objektas.Path);
            if file.Exist then.....

            ' taip pat jeigu tai direktorija tai:
            DirectoryInfo dir = new DirectoryInfo(_Objektas.Path);  
            if dir.exist .... (jei gerai pamenu)

            ' Nors visumoje file dialogas validuoja pats
            


        Else
            return Null;    // VB kiek pamenu tai butu Start = Null vat del VB.net pamirses ;)

        END IF
         
        
    } /* end of  Start  */

    /* Toliau klases visi kiti memberiai */
}

    Visumoje isorinis kvietimas atrodytu tada taip:

    Dim path AS String = ManoKlase.Start(...parametrai...)

    if Not String.IsNullOrEmpty(path) then 

        ' kazka atidarinejam

        ....fileOpen(path)...

    endif



"Valdas" <valdonas@super.lt> wrote in message news:ia8be4$4fg$1@trimpas.omnitel.net...
> na as parametra path ir filtra laikau globaliai, kiek jau ten jie tos vietos 
> uzima, o pacios formos turinys generuojamas kekviena karta ja paleidziant. 
> Dar vat idomu kokiu komponentu nenaudoti kad forma greiciau pasileistu ?
> 
> "Jornada Del Muerto" <agiraTrintI@gmx.co.uk> wrote in message 
> news:ia6tuq$vvm$1@trimpas.omnitel.net...
>>    Tai taip ir yra daryti geriausia, o jeigu tu ja nori saugotis atmintyje 
>> del to kad nepamirst paskutinio vartotojo nurodyto kelio ar kazkokios 
>> tokios informacijos, geriau pasidaryk nustatymu klasyte ar struktura kuria 
>> naudotu jis, pvz:
>>
>> // rasau c# taip greiciau man, bet cia elementari klasyte
>> public class MyDialogSettings {
>>    public string Path;
>>    public string SelectedExtensions;
>>    public string LastFile;
>>
>>    public MyDialogSettings(string path) {
>>        // Jeigu path tuscias ar lygus null tai nukreips i MyDocuments, 
>> kitu atveju naudos path
>>        Path = (String.IsNullOrEmpty( path ? 
>> Environment.SpecialFolder.MyDocuments : path);
>>    }
>>
>>    ir t.t...
>> }
>>
>> Ir tada sios klases objekta saugai kur nors savo klaseje kuri naudoja 
>> dialoga, kadangi .NET dirba reference'ais tai i klase bus paduodamas ne 
>> objektas o tik nuoroda i ji:
>>
>> MyDialogSettings FileOpenSettings = new MyDialogSettings(null); // 
>> inicializuojam my documents keliu
>>
>> ManoDialogas d = new ManoDialogas(Me.FileOpenSettings);
>> d.ShowDialog();
>>
>> Viska ka darys iskvietus d.ShowDialog tavo klase su settingu objektu ja 
>> sunaikinus liks FileOpenSettings klases memberyje, tada kita kart 
>> inicializuojant nauja dialoga paduodi tapati FileOpenSettings ir tavo 
>> klase naudoja juos vel, taip islaikant visa pries tai buvusio dialogo 
>> stovi.
>>
>> Bent jau galima taip daryti, tada nesaugosi ko nereikia o tik ko reikia 
>> atmintyje.
>>
>>
>> "Valdas" <valdonas@super.lt> wrote in message 
>> news:ia5mo5$3qb$1@trimpas.omnitel.net...
>>> na vienok tas variantas :
>>> Dim FileDialog as new Form2
>>> FileDialog.Showdialog()
>>>
>>> padejo, aciu, galima tema uzdarinet :)
>>>
>>> "Jornada Del Muerto" <agiraTrintI@gmx.co.uk> wrote in message
>>> news:ia470e$thv$1@trimpas.omnitel.net...
>>>> GC.[spausk tada ctrl+space] :))
>>>>
>>>> "Valdas" <valdonas@super.lt> wrote in message
>>>> news:ia35n5$bs4$1@trimpas.omnitel.net...
>>>>> Na o tai kaip mano atveju (Visual Studio 5, Visual Basic), prisibrauti
>>>>> prie
>>>>> to GC (Garbage Collector) ?
>>>>>
>>>>> "Jornada Del Muerto" <agiraTrintI@gmx.co.uk> wrote in message
>>>>> news:i9s1h6$n88$1@trimpas.omnitel.net...
>>>>>> Instance tai kazkokio tipo sukurtas objektas, pvz.: DataTable yra 
>>>>>> tipas,
>>>>>> tipas gali buti klase, struktura, ar primityvus tipas pvz int ir t.t..
>>>>>> tai
>>>>>> yra tipas, o sio tipo sukurtas objektas yra to tipo object instance,
>>>>>> arba
>>>>>> tiesiog to tipo instance, pvz.:
>>>>>>
>>>>>> Daleiskim tu susikurei savo open file dialog klase, ja uzvadinai
>>>>>> "ManoFileOpenDialogas" <- kitaip sakant sukurei ManoFileOpenDialogas
>>>>>> tipa.
>>>>>>
>>>>>> ' Deklaruojam
>>>>>> Dim a As ManoFileOpenDialogas ' nurodai kad kintamasis a bus
>>>>>> ManoFileOpenDialogas tipo
>>>>>>
>>>>>> ' kintamajame a sukuriu (kiti dar vadina inicializuoju)
>>>>>> ManoFileOpenDialogas tipo object instance
>>>>>> a = new ManoFileOpenDialogas ' va a ir bus instance (dar kiti vadintu
>>>>>> objektu, zodziu kaip nepavadinsi taip nepagadinsi)
>>>>>>
>>>>>>    Siaip terminologijos ipac tokios bazines OOP vertetu pasimokinti, 
>>>>>> ok
>>>>>> toliaujam keliau :)  tau ka is esmes norejo pasakyti zmones, kad .NET
>>>>>> yra
>>>>>> toks dalykas kaip GC (Garbage Collector) grubiai vertus, siuksliu
>>>>>> rinkejas, pvz. kokiam nors C++ viska alokuota rankiniu budu atminti
>>>>>> skirta
>>>>>> kazkokiam programos darbui, po to reikedavo nepamirsti atlaisvinti -
>>>>>> kitaip ji uzimdavo ir toliau vieta ir su laiku prisikaupdavo tos
>>>>>> rezervuotos/alokuotos atminties daug, nuo ko galedavo luzti programa,
>>>>>> .net
>>>>>> atvejais tam buna ivairus metodai dispose ir pan.. Bet .NET daugeli
>>>>>> tokiu
>>>>>> objektu pasalina pats GC pagalba, del to greiciausia su tavuoju 
>>>>>> objektu
>>>>>> taspats atsitinka, tiesiog reik suprasti kokiom aplinkybem .net pats
>>>>>> juos
>>>>>> naikina.
>>>>>>
>>>>>>    Visumoje .net automatu, kaip jau ir minejau naikina objektus kurie
>>>>>> niekur nera saugomi ar isiminti, pvz kazkokiam kintamajame ir 
>>>>>> panasiai,
>>>>>> pvz. turime funkcija:
>>>>>>
>>>>>> Public Sub ManoFunkcija
>>>>>>
>>>>>>    Dim a As ManoFileOpenDialogas '
>>>>>>    a = new ManoFileOpenDialogas
>>>>>>
>>>>>>    ' dirbi su a
>>>>>>    a.DoModal() ' ir t.t...
>>>>>>
>>>>>> End Sub
>>>>>>
>>>>>>    Isejus is sios funkcijos a bus automatiskai naikinamas, bet sekanti
>>>>>> karta iskvietus sia funkcija (tiksliau metoda) objektas sukuriamas bus
>>>>>> is
>>>>>> naujo, taip va ir turetu buti daroma, paprastai atmintyje niekas 
>>>>>> nelaiko
>>>>>> inicializuotu OpenFileDialog'u, aplamai kuo maziau laikysi tokio
>>>>>> nereikalingo saugoti slamsto tuo tavo programa maziau resursu valgys, 
>>>>>> o
>>>>>> jeigu nori ji saugotis del to kad naudosi labai daznai (nebent) tai
>>>>>> saugokis toje klaseje kuri su juo dirbs, tada butu kazkas tokio:
>>>>>>
>>>>>> ' Klases, bet ne metodo/funkcijos zonoje deklaruotas kintamasis
>>>>>> public OpenFile As ManoFileOpenDialogas = Null ' Nepamenu gerai VB.NET
>>>>>> sintakses, paskutini kart reikejo pries 5 metus
>>>>>>
>>>>>> Public Sub ManoFunkcija
>>>>>>
>>>>>>    If Me.OpenFile = Null Then ' rodos VB kitaip tikrinasi ar objektas
>>>>>> null
>>>>>>        Me.OpenFile = new ManoFileOpenDialogas
>>>>>>    End If
>>>>>>
>>>>>>    ' kreipiesi i savo dialoga
>>>>>>    Me.DoModal() ' ir t.t...
>>>>>>
>>>>>> End Sub
>>>>>>
>>>>>> Tada 1 karta bus sukuriamas dialogas ir veliau pernaudojamas ji
>>>>>> nekuriant
>>>>>> dar karta, tuo paciu jis saugomas bus klaseje kuri ji naudoja, siaip 
>>>>>> tai
>>>>>> geriausia savo kodo parasytum, tai tada butu aiskiau kas negerai, gal
>>>>>> beda
>>>>>> visai kitur.
>>>>>>
>>>>>>
>>>>>> Freelancer Developer [R&D]
>>>>>> http://www.lythum.lt
>>>>>>
>>>>>> Naujausias research:
>>>>>> http://wiki.lythum.lt/index.php?title=Facebook_integrafimo_galimyb%C4%97s
>>>>>>
>>>>>>
>>>>>> "Valdas" <valdonas@super.lt> wrote in message
>>>>>> news:i9rr3e$cre$1@trimpas.omnitel.net...
>>>>>>> na as kazko nesuprantu, siaip as ant Visual Basic darau, tai kas tas
>>>>>>> instance nezinau :((
>>>>>>>
>>>>>>> "Andrius F" <andriusflMORESPAM@gmail.com> wrote in message
>>>>>>> news:i9rq8p$bic$1@trimpas.omnitel.net...
>>>>>>>> kiekviena karta pries ShowDialog() kurk nauja instance..
>>>>>>>> using(var form = new SomeForm())
>>>>>>>> {
>>>>>>>>    if(form.ShowDialog(this) == DialogResult.Ok)
>>>>>>>>    {
>>>>>>>>        ...
>>>>>>>>    }
>>>>>>>> }
>>>>>>>>
>>>>>>>> "Valdas" <valdonas@super.lt> wrote in message
>>>>>>>> news:i9rf9u$qk9$1@trimpas.omnitel.net...
>>>>>>>>> ka reiskia nereusint instance, tai kaip tada naudotis tuo 
>>>>>>>>> ShowDialog
>>>>>>>>> ?
>>>>>>>>> man reikalingas tas modaliskumas, nes darau savo open file dialoga,
>>>>>>>>> ir
>>>>>>>>> kai uzdarau forma, tik tuomet gaunu reiksme...
>>>>>>>>>
>>>>>>>>> "fakeID" <fakeID@fakeHost.com> wrote in message
>>>>>>>>> news:i9rcss$n3d$1@trimpas.omnitel.net...
>>>>>>>>>> Nereiktu reusinti formos instance, nebent tau tikrai taip reikia
>>>>>>>>>> (pvz
>>>>>>>>>> forma kuriasi 15 sek, bet tada turbut kazkas blogai su tavo forma
>>>>>>>>>> ;)..
>>>>>>>>>> Blogiausiu atveju isitikink, kad GarbageCollector nesunaikins tavo
>>>>>>>>>> formos:
>>>>>>>>>>    a. ikisk instance i static field
>>>>>>>>>>    b. galbut verta overridint close, ir hidint forma vietoj
>>>>>>>>>> base.close()
>>>>>>>>>>
>>>>>>>>>> bet siaip - nereusink instance. tai bloga architektura
>>>>>>>>>>
>>>>>>>>>> "Valdas" <valdonas@super.lt> wrote in message
>>>>>>>>>> news:i9r6gd$er1$1@trimpas.omnitel.net...
>>>>>>>>>>> Sveiki, iskilo tokia beda, bandant is vienos formos atidaryti 
>>>>>>>>>>> kita
>>>>>>>>>>> "Forrm2.ShowDialog()", pradzioje atidaro, bet programai padirbus
>>>>>>>>>>> kokia
>>>>>>>>>>> valanda ir vel bandant atidaryti, meta klaida
>>>>>>>>>>> "ObjectDisposedException", gal nujauciat kur cia beda ?
>>>>>>>>>>>
>>>>>>>>>>> aciu
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>
>>>>>
>>>
>>> 
> 
>