• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zatrzymanie działania programu w konkretnym miejscu

Object Storage Arubacloud
0 głosów
445 wizyt
pytanie zadane 2 maja 2017 w C# przez daroczaro Nowicjusz (240 p.)

Cześć, piszę notatnik w C# i mam problem. Chcę obsłużyć zdarzenie  dla Menu>Nowy. Tak jak w windowskowskim notatniku daje plik>nowy i mam nowy dokument.

U mnie to ma działać tak, że po kliknięciu na 'nowy' program wyczyści ekran, ale wcześniej sprawdzi czy coś nie znajduje się w tekstboxie i zapyta czy to zapisać. Stworzyłem metodę do zapisu do pliku:

 private void zapisywanie()
        {
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                File.WriteAllText(saveFileDialog1.FileName, Tekst.Text);
            }
        
        }

A poniżej obsługa Menu> Nowy:

 private void nowyToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (Tekst.Text != "")
            {
                DialogResult result = MessageBox.Show("Czy chcesz zapisać zmiany?", "Notatnik", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);

                switch (result)
                {
                    case DialogResult.Yes:
                        zapisywanie();
                  
                        break;

                    case DialogResult.No:
                        Tekst.Clear();
                        break;
                }
            }
            
        }

Gdy dam "nie" to ekran się wyczyści(mam nowy dokument), gdy dam "anuluj" to wrócę do dokumentu bez czyszczenia i to mam ogarnięte.

Teraz sprawa ma się tak, jak dam "tak" to pokaże się okno dialogowe do zapisu. Jeżeli w tym ognie wybiorę "zapisz" to się zapisze i jest git, gdy dam "anuluj" to wróci do dokumentu. A ja potrzebuję zrobić tak by po zapisie ekran się wyczyścił, a gdy dam anuluj to by powrócił bez czyszczenia.

Próbowałem już dawać w różnych miejscach czyszczenie, ale nie działa to tak jak powinno:( np: Po zapisie czyści mi ekran, ale jeżeli dam anuluj to też czyści:(

jak zrobić by w oknie dialogowym zapisu  po kliknięciu 'anuluj' dalsze instrukcje się nie wykonywały?

 

komentarz 2 maja 2017 przez NowyUrzydgownig Mądrala (5,090 p.)
Możesz dać w switch default i tyle.

1 odpowiedź

0 głosów
odpowiedź 3 maja 2017 przez daroczaro Nowicjusz (240 p.)

No a co mi tu da default? Raczej chyba nic, może się mylę. Ja potrzebuję się jakoś wbić z instrukcją clear() w metodę zapisywanie(), że przy wyborze 'zapisz' zapisze i wyczyści dokument, a przy wyborze 'anuluj' wróci do dokumentu bez czyszczenia. To pierwsze potrafię zrobić,ale wtedy przy wyborze anuluj także mi czyści.

private void nowyToolStripMenuItem_Click(object sender, EventArgs e)
       {
           if (Tekst.Text != "")
           {
               DialogResult result = MessageBox.Show("Czy chcesz zapisać zmiany?", "Notatnik", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
 
               switch (result)
               {
                   case DialogResult.Yes:
                       zapisywanie();
                       Tekst.Clear(); // jeżeli tak zrobię to będzie ok jeżeli kliknę 'zapisz',a jeżeli dam 'anuluj' to też wyczyści a powinno się przerwać
                       break;
 
                   case DialogResult.No:
                       Tekst.Clear();
                       break;
               }
           }
            
       }

 

komentarz 3 maja 2017 przez piotrsz109 Stary wyjadacz (13,730 p.)
Jak dodasz default wpiszesz tam np: return; i po problemie.

Tak wykonuje drugi przypadek w switch'u.
komentarz 3 maja 2017 przez daroczaro Nowicjusz (240 p.)
No nie bardzo, w switchu mam tylko 3 przypadki i wszystkie 3 są obsłużone więc po co default? Zresztą po default musi być także break, a to nie działa tak samo jak return?
komentarz 7 maja 2017 przez piotrsz109 Stary wyjadacz (13,730 p.)
Return zakończy funkcję natychmiast. I przenieś może case z Cancel na samą górę.
komentarz 7 maja 2017 przez daroczaro Nowicjusz (240 p.)
Mógłbyś to przedstawić w kodzie? Bo szczerze mówiąc to nie rozumiem. Kod znajduję się wyżej
komentarz 7 maja 2017 przez piotrsz109 Stary wyjadacz (13,730 p.)
 switch (result)
               {
case DialogResult.Cancel:
return;
break;
                   case DialogResult.Yes:
                       zapisywanie();
                       Tekst.Clear(); // jeżeli tak zrobię to będzie ok jeżeli kliknę 'zapisz',a jeżeli dam 'anuluj' to też wyczyści a powinno się przerwać
                       break;
  
                   case DialogResult.No:
                       Tekst.Clear();
                       break;
               }

 

komentarz 7 maja 2017 przez daroczaro Nowicjusz (240 p.)
Chyba mnie źle zrozumiałeś:( nie o to mi chodziło.  Zobacz na przypadek dla 'Yes', jeżeli użytkownik kliknie Yes to będzie się wykonywać kod metody zapisywanie, a następnie czyszczenie texboxa. ja potrzebuję zrobić tak by podczas zapisywania jeżeli użytkownik kliknie anuluj to ekran mu się nie wyczyści.
komentarz 8 maja 2017 przez piotrsz109 Stary wyjadacz (13,730 p.)
I tak jest. Po wybraniu anuluj funkcja się zakończy co spowoduje że nic się nie stanie.
komentarz 8 maja 2017 przez daroczaro Nowicjusz (240 p.)
Dalej mam wrażenie że źle mnie rozumiesz... Tak czy siak nawet jak ja coś źle zrozumiałem to ten kod nie działa:(

Podobne pytania

+1 głos
2 odpowiedzi 360 wizyt
pytanie zadane 29 czerwca 2015 w C i C++ przez Phobos Użytkownik (720 p.)
0 głosów
2 odpowiedzi 174 wizyt
pytanie zadane 10 czerwca 2015 w C i C++ przez cartel13 Nowicjusz (160 p.)
+1 głos
1 odpowiedź 279 wizyt
pytanie zadane 23 marca 2021 w C i C++ przez jan1 Nowicjusz (220 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...