Avatar billede jan2001 Nybegynder
05. januar 2008 - 01:53 Der er 9 kommentarer og
1 løsning

Lukke program efter fejl

Ved tryk på knap i hovedformen åbnes en form og et objekt instantieres. Dette objekt skal læse fra en fil. Hvis filen ikke findes fanges det med FileNotFoundException og en besked dukker op om fejlen. Herefter fortsætter programmet og kalder metoder, som ikke virker uden objektet, og programmet bryder sammen.
Er det muligt at stoppe såsnart fejlen opdages og vende tilbage til hovedformen før der gåes videre?

        private Varer _Varer;
        public frmHPMVarer()
        {
            InitializeComponent();
            try
            {
                this._Varer = new Varer();
            }
            catch (FileNotFoundException)
            {
                MessageBox.Show("Fil mangler");
            }
            UdskrivVarerIListview();

        }
Avatar billede arne_v Ekspert
05. januar 2008 - 02:14 #1
prøv:

            catch (FileNotFoundException)
            {
                MessageBox.Show("Fil mangler");
                Application.Exit();
            }
Avatar billede jan2001 Nybegynder
05. januar 2008 - 22:34 #2
Nej, det virker ikke. Den hopper stadig videre til UdskrivVarerListview();
Avatar billede lasserasch Juniormester
05. januar 2008 - 23:01 #3
Jeg ville nok gøre det sådan at din metode til at forsøge at åbne filen retunerer en boolean værdi. Og hvis den retunerer en true værdi udfører du så de andre metode kald.

Noget ala :

private Varer _Varer;
        public frmHPMVarer()
        {
            InitializeComponent();
            if (ReadFile())
              {
                UdskrivVarerIListview();
              }
            else
              {
                MessageBox.Show("Fil mangler");
              }
        }

og så denne :

private boolean ReadFile ()
{
try { åben fil og læs fra den kode; return true; }
catch { retrun false; }
}

/Lasse
Avatar billede arne_v Ekspert
05. januar 2008 - 23:09 #4
Hvis Application.Exit(); ikke stopper programmet så prøv Environment.Exit(0)
Avatar billede jan2001 Nybegynder
05. januar 2008 - 23:55 #5
Jeg har nu prøvet at sætte try catch in på formen som åbner den nye form, der skal bruge en fil.

            try
            {
                frmHPMVarer frmvarer = new frmHPMVarer();
                frmvarer.ShowDialog();
            }
            catch
            {
                MessageBox.Show("Fil mangler eller kan ikke læses.");
            }

Hvis filen mangler eller ikke kan læses så åbnes der ikke en ny form og programmet går ikke ned. Jeg ved ikke om dette er den helt rigtige måde at gøre det på. Jeg kan dog ikke spørge på nogen særlig undtagelse såsom filenotfoundexeption, men blot enhver fejl. Så jeg kan ikke fortælle brugeren, hvad fejlen er.
Avatar billede lasserasch Juniormester
06. januar 2008 - 18:05 #6
Jo, men arne, som jeg forstår det, så vil han ikke have programmet til at lukke ned når der opstår en exception.

Han vil bare fange den og sørge for at programmet så ikke fortsætter med at kalde de resterende metoder... Korrekt jan2001?


Altså jeg ville gøre det sådan her :

i form1 ville jeg lave følgende :

-------
frmHPMVarer frmvarer = new frmHPMVarer();
String ErrMsg = frmvarer.InitForm();
if (ErrMsg != "OK")
Messagebox.Show(ErrMsg, "Der opstod en fejl!);
-------

i form2 ville jeg så lave følgende :

public String InitForm()
{
try
{
  this._Varer = new Varer();
  UdskrivVarerIListview();
  this.ShowDialog();
  return "OK";
}
catch (Exception Ex) { return Ex.Messsage; }

}


På den måde vil form2 kun blive vist såfremt din fil kan læses.
Hvis den ikke kan læses, fanges din exception af din try{} catch {} på form 2 og sender Exception Message tilbage til form1 som så viser en messagebox med beskrivelse af fejlen.


/Lasse
Avatar billede arne_v Ekspert
06. januar 2008 - 18:28 #7
Jeg tror at du har ret.
Avatar billede jan2001 Nybegynder
06. januar 2008 - 20:25 #8
Jo, på den måde skulle jeg kunne sætte enhver slags undtagelse ind i catch, men ellers virker min egen løsning egentlig også ok.
Men jeg tror godt jeg vil bruge din løsning lasserasch. Så læg gerne et svar.
Og tak for hjælpen.
Avatar billede jan2001 Nybegynder
20. marts 2008 - 19:09 #9
lasserasch: ikke interesseret i point?
Avatar billede lasserasch Juniormester
20. marts 2008 - 21:12 #10
Havde glemt alt om dette indlæg. Hermed svar :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester