Wyjątki i obsługa błędów 1. Try catch using System; public class Example public static void Main() int number1 = 3000; int number2 = 0; Console.WriteLine(number1 / number2); catch (DivideByZeroException) Console.WriteLine("Division of 0 by zero.", number1); // The example displays the following output: // Division of 3000 by zero. class ProgramLog System.IO.FileStream logfile = null; void OpenLog(System.IO.FileInfo filename, System.IO.FileMode mode) void WriteLog() if (!this.logfile.canwrite) throw new System.InvalidOperationException("Logfile cannot be read-only"); // Else write data to the log and return. static int GetValueFromArray(int[] array, int index) return array[index]; catch (System.IndexOutOfRangeException ex) System.ArgumentException argex = new System.ArgumentException("Index is out of range", "index", ex); throw argex;
static void TestCatch2() System.IO.StreamWriter sw = null; sw = new System.IO.StreamWriter(@"C:\test\test.txt"); sw.writeline("hello"); catch (System.IO.FileNotFoundException ex) // Put the more specific exception first. System.Console.WriteLine(ex.ToString()); catch (System.IO.IOException ex) // Put the less specific exception last. System.Console.WriteLine(ex.ToString()); finally sw.close(); System.Console.WriteLine("Done"); static void TestFinally() System.IO.FileStream file = null; //Change the path to something that works on your machine. System.IO.FileInfo fileinfo = new System.IO.FileInfo(@"C:\file.txt"); file = fileinfo.openwrite(); file.writebyte(0xf); finally // Closing the file allows you to reopen it immediately - otherwise IOException is thrown. if (file!= null) file.close();
file = fileinfo.openwrite(); System.Console.WriteLine("OpenWrite() succeeded"); catch (System.IO.IOException) System.Console.WriteLine("OpenWrite() failed"); 2. Potwierdzenie zamknięcia aplikacji Zadaniem jest stworzenie prostego edytota graficznego posiadającego opcje zapisywania pliku oraz sprawdzania czy po wprowadzonych zmianach ma być wersja zapisywana. W designerze dodać metodę zdarzeniową FormClosing. DialogResult dr=messagebox.show( Czy zapisać?, this.text, switch(dr) MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button3); case DialogResult.Yes: MessageBox.Show( Opcja 1-zapisz savefiledialog ); break; case DialogResult.No: break; case DialogResult.Cancel: e.cancel=true; break; default: e.cancel=true; break; W programie uwzględnij: Okno dialogowe do zapisywania Metodę sprawdzającą czy dokument się zmienił (np. metodę typu bool opierającą się na TextChanged komponentu textbox) 3. Odczytywanie tekstu z pliku Napisać prosty program do odczytywania tekstu z pliku, tekst wczytywany do tablicy łańcuchów. Skorzystaj: using System.IO; oraz typu ogólnego List: List<string> tekst=new List<string>();
Wyjątek odczytu pliku (skorzystaj z openfiledialog): using (StreamReader sr=new StreamReader(nazwa_pliku)) string linijka; while((linijka=sr.readline())!=null) //wczytywanie do akapitów można bezpośrednio zwrócić do własności Lines komponentu TextBox, jeżeli całość pliku to np. ReadToEnd tekst.add(linijka); return tekst.toarray(); catch (Exception e) MessageBox.Show( Bład +nazwa_pliku+ ( +e.message+ ) ); return null; W programie można stworzyć metodę do wczytywanie plików: public static string[] WczytajPlik(string nazwa_pliku) i wykorzystać bezpośrednio w menu jako otwórz plik (element ToolStripMenuItem_Click) string nazwa_pliku=ofd1.filename; textbox1.lines=wczytajplik(nazwa_pliku). Zapoznaj się z własnościami openfiledialog: DefaultExt, InitialDirectory, FileName, Filter Przykładowy filtr: Tekstowe(*.txt) *.txt Wszystkie pliki (*.*) *.* W przypadku zapisywanie należy stworzyć metodę zapisu z argumentami typu string oraz string[]: Public static void ZapiszPlik(string nazwa_pliku, string[] tekst) Using (StreamWriter sw=new SW(nazwa_pliku)) foreach (string wiersz in tekst) sw.writeline(wiersz);
Wywołanie: ZapiszPlik(saveFileDialog1.FileName, textbox1.lines) Dodaj opcje: Undo(), Cut(), Copy(), Paste(), SelectedText, SelectAll 4. Projekt budzik Projekt ma zakładać pojawiania się okna o konkretnych godzinach, wraz z sygnalizacją dźwiękową. Można skorzystać z własności okna głównego umożliwiającego stworzenie kształtu innego okna niż prostokątny (BackGroundImage, FormBorderStyle, StartPosition, ShowInTaskbar) Komponent Panel (BorderStyle->FixedSingle, Dock->Fill Komponenty Label (ustawienia dowolnych wartości tekstowych) Komponent Timer (Interval na 4000 mm, Enabled->True, metoda timer_tick -> Hide(), time1.enabled=false;) Można również powiązać metodę Click okna Form1 z metodą timer_tick Dodać obiekt NotifyIcon z dodanym menu kontekstowym po kliknięciu prawego przycisku myszy. (dodać komponenty: NotifyIcon oraz ContextMenuStrip-ustalić dwie dowolne warianty) Ustalić metodę zdarzenia Click pierwszej opcji: Show(), timer1.enabled=true; Zdefiniować drugą opcję jako zamknięcie aplikacji: notifyicon1.visible=false; Close(); Ustalić wartość notifyicon1 ->Visible na true. Dodać iconę właśność Icon w Properties Powiązać obiekt contextmenustrip1 z wlasnością ContextMenuStrip obiektu notifyicon1 Zdefiniować metodę zdarzeniową MouseMove na obiekcie notifyicon1: notifyicon1.text= Godzina: ( +DateTime.Now.ToShortTimeString()+ ) ; Opcjonalnie można ustalić wartość własności BaloonTipTitle (obiekt notifyicon) Info (zdefiniować zdarzenie DoubleClick w celu pokazywania aktualnej daty w wersji rozszerzonej np. String s= data +DateTime.Today.ToLongDateString(); notifyicon1.balloontiptext=s;) Odtwarzanie dźwięku: komponent System.Media.SoundPlayer Pobrać dowolny plik WAVE I za pomocą Solution Explorer dodać do zasobów. Zmiana wartość w Solution Explorer z Copy to Output Directory na Copy if newer lub Copy always. Dodaj Timer (timer2) Dodać metodę Form1_Load oraz zdefiniować metodę sprawdzenia danej godziny.
DateTime godz=new DateTime(DateTime.NowYear, DateTime.NowMonth, DateTime.NowDay, DateTime.NowHour+1,0,0,0); long odstep=(godz.ticks-datetime.now.ticks)/10000; timer2.interval=(int)odstep; timer2.enabled=true Zdefiniować metodę timer2.tick timer2.interval=360000; //jeżeli co godzinę 1000ms60sek60min (new System.Media.SoundPlayer(Utwór.wav )).Play(); notifyicon1_doubleclick(sender, e); //opcjonalne