Zapisywanie zmian po zamknięciu programu

0

Jak zrobić coś takiego, żeby po zamknięciu programu zapisały się zmiany - chodzi mi o zmiany etykiet buttonów?

1

Settings aplikacji. Pełno jest poradników o tym w necie.

0

Na pewno jest pełno, ale właśnie nie za bardzo wiem jak to nazwać. Możesz powiedzieć gdzie dokładnie znajdę taką opcję?

1

Za każdym razem jak stworzysz nowy projekt okienkowy to środowisko automatycznie dodaje ci do niego plik settings (w zakładce properties). Mnie to akurat denerwuje (bo wolę sam decydować czego chce używać więc settings zawsze od razu wylatują...), ale zależy co kto lubi.

Albo daj Add -> new item -> Settings.
Dość to intuicyjne, sam zobaczysz, środowisko nawet dorzuca ci link learn more.

Wiem że lakonicznie tłumaczę, ale lepiej dla ciebie żebyś przeczytał na ten temat jakiś profesjonalny artykuł niż żebym ja wrzucał tu jakieś swoje napisane na szybko wypociny ;)

Pytaj jeśli czegoś nie będziesz wiedział,
Powodzenia ;)

0

Niestety nadal nie mogę znaleźć tego pliku z ustawieniami. Możesz jeszcze nakierować?

0

Nakierowanie -> OKULARY i/lub LUPA.

user image

user image

0

a ja bym powiedzial, PRAWY-klik na projekcie, Properties, i zakladka "Settings"..

0

No niestety nie mam takiej zakładki. Jedyne co udało mi się odnaleźć to włączanie Text File. Piszę pod Windows Mobile - na pewno jest trochę mniej opcji. Jak już mam ten Text File to co zrobić?

0
Bladowski napisał(a)

Piszę pod Windows Mobile

Piękni są ci kolesie, którzy piszą na forum, że potrzebują pomocy, a tak naprawdę wcale jej nie chcą. [rotfl]

0
Bladowski napisał(a)

No niestety nie mam takiej zakładki. Jedyne co udało mi się odnaleźć to włączanie Text File. Piszę pod Windows Mobile - na pewno jest trochę mniej opcji. Jak już mam ten Text File to co zrobić?

Heh.. no toś się minał z ważną informacją.. trzeba było od razu mowic ze piszesz pod .Net CF/WinMobile. Nie ma zakladki Settings, gdyz nie ma opcji dodania takiego pliku. Po prostu, na .NetCF w System.dll nie ma klasy System.Configuration.ApplicationSettingsBase. Musisz swoje rzeczy trzymac gdzies indziej.. Moze w rejestrze, albo w jakims pliku .xml w swoim katalogu, w bazie sqlce, ...

0

Rozumiem, że gdybym chciał trzymać to w tym pliku .xml to muszę normalnie napisać funkcję, która czyta mi ten plik .xml?

0

nie no, nie przeginajmny, CF nie jest az tak ograniczony..
DataSet::ReadXml
System.Xml.XmlDocument

0

Ja tam bym sobie zrobił klasę do konfiguracji i ją serializował.

//quetz: jeden pies, na jedno wychodzi.. a jak On ma juz jakas baze sqlce, to datasetem bedzie mu latwiej

0

Teraz się zastanawiam na czym polega stworzenie takiego pliku .xml. Mam go fizycznie stworzyć i wsadzić do folderu aplikacji czy on się tam jakoś komponuje w ów aplikację? Chciałbym tylko, żeby przy każdym wyłączaniu programu zapisywał zawartość jednego pola tekstowego oraz etykiety 5 buttonów.

0
  1. Tworzysz w programie DTO zawierajce 6 stringow.
  2. Opisujesz pola klasy odpowiednimi atrybutami XML.
  3. Podczas wlaczenia pliku sprawdzasz czy plik istnieje. Jesli nie -> idz pkt. 5)
  4. Wczytujesz dane z XML do swojego programu i ustawiasz kontrolkom odpowiednie wartosci. (deserializacja)
  5. Podczas zamkniecia programu odczytujesz dane z kontrolek, tworzysz nowy DTO i serializujesz w 2-3 linijkach do pliku XML.

O wyjasnienie pojec niezrozumialych odsylam do google.pl, bylo, jest i bedzie tysiace stron o tym.

0

Za trudna sprawa jak dla mnie, nie mogę do tego dojść. Poza tym ten sposób jest strasznie zawiły. Jak ja patrzę na DTO to jestem przerażony. Nie ma jakiejś prostszej metody?

0

przesadzasz.. ten kod wymaga zero inwencji tworczej, mozesz go wyklepac metoda kopiego-pasta i jest prosty jak budowa cepa, nie sorry, kija od cepa.


//zaczynamy pisac DataObject
[Serializable]  // <--- wazne
class X
{ public string txtbx, bt0,bt1,bt2,bt3,bt4; }
// koniec DataObject

class Form
{...
    // zaczynamy pisac kod pakowanie/rozpakowania danych z DataObject
    private X pack()
    {
        return new X       // przyjemna skladnia - tworzenie + przypisanie publiczncyh field/property 'w jednym'
        {
            txtbx = textBox.Text,
            bt0 = buttonZero.Text,
            bt1 = buttonJeden.Text,
            bt2 = buttonDrugi.Text,
            bt3 = buttonTrzeci.Text,
            bt4 = buttonCzwarty.Text,
        };
    }

    private void unpack(X x)
    {
        textBox.Text = xtxtbx;
        buttonZero.Text = x.bt0 ;
        buttonJeden.Text = x.bt1; 
        buttonDrugi.Text = x.bt2; 
        buttonTrzeci.Text = x.bt3; 
        buttonCzwarty.Text = x.bt4; 
    }
    // koniec pisania kod pakowanie/rozpakowania danych z DataObject

    // zaczynamy pisac serializacje obiektu DTO typu X
    private void saveMe(string filename)
    {
        //tresc napisz sam:
        //0 otworz strumien pliku: filename
        //1 zbuduj nowy XmlSerializer, typ struktury: typeof(X)
        //2 kaz mu zserializowac otrzymany X do strumienia
        //3 pozamykaj strumienie
    }

    private void loadMe(string filename)
    {
        //tresc napisz sam:
        //0 otworz strumien pliku: filename
        //1 zbuduj nowy XmlSerializer, typ struktury: typeof(X)
        //2 kaz mu zDEserializowac ze strumienia - otrzymasz wypelniony X, podaj go metodzie loadMe
        //3 pozamykaj strumienie
    }
    // koniec pisania serializacji obiektu DTO typu X
    ...
}

wskaz linie, która Cie przeraża?

btw. metody saveMe oraz loadMe maja praktycznie tyle linijek kodu, co widac w pseudokodzie. nawet nie ma w nich petli

0
quetzalcoatl napisał(a)

btw. metody saveMe oraz loadMe maja praktycznie tyle linijek kodu, co widac w pseudokodzie. nawet nie ma w nich petli

Szczerze mówiąc tam powinny być dwie linijki kodu i dwie klamerki. ;)

0

tak.. a kontorlki w jakims secie i przejechane petlami, a nie wyliczane recznie.. ale pomyslalem ze lepiej pokazac w luznej formie

0

Muszę się z tym obyć. Dzięki za pomoc.

0
quetzalcoatl napisał(a)

ale pomyslalem ze lepiej pokazac w luznej formie

Dobra, już siedzę cicho i ani słowa o usingu. [diabel]

1 użytkowników online, w tym zalogowanych: 0, gości: 1