Tema: Re: Visual studio 5 ir modaline forma
Autorius: Jornada Del Muerto
Data: 2010-10-26 19:00:26
    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
>>>>>>>>>
>>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>
>>>>>
>>>
>>> 
> 
>