C# Windows Forms Zastosowania Informatyki Wykład 3 adam.czajka@wsnhid.pl Copyright, 2004 © Adam Czajka
Copyright, 2004 © Adam Czajka Spis treści Aplikacja Obiekt WinForm Copyright, 2004 © Adam Czajka
Aplikacja „Cykl życia” aplikacji .NET Aplikacja Obiekt Form1 Application.Run(Form1); Copyright, 2004 © Adam Czajka
Copyright, 2004 © Adam Czajka Aplikacja „Cykl życia” aplikacji .NET Platforma .NET Aplikacja .NET Funkcja_obsługi_zdarzenia_1 Funkcja_obsługi_zdarzenia_2 Funkcja_obsługi_zdarzenia_3 Funkcja_obsługi_zdarzenia_4 . . . . . . Funkcja_obsługi_zdarzenia_N kolejka komunikatów start koniec komunikat ? WM_QUIT ? wywołaj procedurę obsługi TAK NIE Copyright, 2004 © Adam Czajka
Copyright, 2004 © Adam Czajka Aplikacja „Cykl życia” aplikacji .NET Aplikacja Obiekt Form1 Form2 Obiekt niemodalny Copyright, 2004 © Adam Czajka
Copyright, 2004 © Adam Czajka Aplikacja „Cykl życia” aplikacji .NET Aplikacja Obiekt Form1 Form2 Obiekt modalny Obiekt Form1 Form3 Form2 Copyright, 2004 © Adam Czajka
Copyright, 2004 © Adam Czajka Aplikacja „Cykl życia” aplikacji .NET Aplikacja Obiekt Form1 Form2 Obiekt modalny Obiekt Form1 Form4 Form2 Copyright, 2004 © Adam Czajka
Copyright, 2004 © Adam Czajka Aplikacja „Cykl życia” aplikacji .NET Aplikacja Obiekt Form1 Form2 Application.Exit(); Copyright, 2004 © Adam Czajka
Copyright, 2004 © Adam Czajka Aplikacja „Cykl życia” aplikacji .NET Aplikacja Obiekt Form1 Copyright, 2004 © Adam Czajka
Copyright, 2004 © Adam Czajka Aplikacja „Cykl życia” aplikacji .NET Aplikacja Koniec programu Copyright, 2004 © Adam Czajka
Copyright, 2004 © Adam Czajka Aplikacja Obiekt Application Wszystkie komponenty są statyczne Właściwości : public static string CompanyName {get;} public static CultureInfo CurrentCulture {get; set;} public static InputLanguage CurrentInputLanguage {get; set;} public static string ExecutablePath {get;} public static string ProductName {get;} public static string ProductVersion {get;} public static string StartupPath {get;} public static string UserAppDataPath {get;} public static RegistryKey UserAppDataRegistry {get;} Copyright, 2004 © Adam Czajka
Copyright, 2004 © Adam Czajka Aplikacja Obiekt Application Wszystkie komponenty są statyczne Metody : public static void DoEvents(); public static void EnableVisualStyles(); public static void Exit(); public static void Run( Form mainForm ); Zdarzenia : public static event EventHandler Idle; public static event ThreadExceptionEventHandler ThreadException; Copyright, 2004 © Adam Czajka
Copyright, 2004 © Adam Czajka Aplikacja AssemblyInfo.cs Copyright, 2004 © Adam Czajka
Copyright, 2004 © Adam Czajka Aplikacja Form1.cs Copyright, 2004 © Adam Czajka
Copyright, 2004 © Adam Czajka WinForm Obiekt formy (okna) Pola – odpowiedzialne za wygląd okienka i jego „zachowanie” Zdarzenia – pozwalają reagować na sytuacje zachodzące wewnątrz okienka Metody – pozwalają kontrolować okienko Copyright, 2004 © Adam Czajka
Copyright, 2004 © Adam Czajka WinForm – właściwości 1 Kolor tła Rysunek tła Typ kursora myszki Czcionka Kolor tekstu Rodzaj ramki Tytuł okienka Nazwa obiektu Copyright, 2004 © Adam Czajka
WinForm – właściwości 2 Automatyczne skalowanie okienka Automatyczne „przewijanie” okienka położenie okienka na ekranie Rozmiar minimalny okienka Rozmiar maksymalny okienka Rozmiar początkowy okienka Przycisk akceptacji „okna dialogowego” Przycisk anulowania „okna dialogowego” Copyright, 2004 © Adam Czajka
WinForm – właściwości 3 Menu systemowe włączone Ikona programu Przycisk maksymalizacji okna widoczny Menu programu Przycisk minimalizacji okna widoczny Stopień przeźroczystości okna Okno widoczne na „pasku zadań” Okno typu „Top-Most” Kolor przeźroczysty Copyright, 2004 © Adam Czajka
WinForm – zdarzenia „klik” myszką wewnątrz okienka Podwójny „klik” myszką wewnątrz okienka Odrysowywanie okienka Zamykanie okienka Ładowanie okienka Copyright, 2004 © Adam Czajka
Copyright, 2004 © Adam Czajka WinForm – metody public void Activate(); public void Close(); public Graphics CreateGraphics(); public void Hide(); public void Invalidate(); public virtual void Refresh(); public void Show(); public DialogResult ShowDialog(); public DialogResult ShowDialog( IWin32Window owner ); public void Update(); public bool Validate(); DialogResult.None, DialogResult.OK, DialogResult.Yes, DialogResult.No, DialogResult.Cancel Copyright, 2004 © Adam Czajka
Tworzenie i zamykanie formy - okienka WinForm Tworzenie i zamykanie formy - okienka private void button1_Click(object sender, System.EventArgs e) { //utworzenie nowej formy - dialogu Form dlg1 = new Form(); dlg1.Show(); } private void InformationProcessed() { // ustawienie wyniku wykonania dla formy – powoduje zamknięcie // bieżacej formy this.Close(); } Copyright, 2004 © Adam Czajka
Tworzenie i zamykanie formy - okienka WinForm Tworzenie i zamykanie formy - okienka private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) { if (MessageBox.Show("Czy zakończyć program ?", "Pytanie", MessageBoxButtons.YesNo) == DialogResult.No) e.Cancel = true; } Copyright, 2004 © Adam Czajka
Tworzenie i zamykanie formy - dialogu WinForm Tworzenie i zamykanie formy - dialogu private void button1_Click(object sender, System.EventArgs e) { //utworzenie nowej formy - dialogu Form dlg1 = new Form(); dlg1.ShowDialog(); } private void InformationProcessed() { // ustawienie wyniku wykonania dla formy – powoduje zamknięcie // bieżacej formy DialogResult = DialogResult.Yes; } Copyright, 2004 © Adam Czajka
Wstawianie komponentów WinForm Wstawianie komponentów Obiekt „zegara”, każdy obiekt w ramach formy jest identyfikowany poprzez swoją unikalną nazwę – tu: timer1 Copyright, 2004 © Adam Czajka
Wstawianie komponentów WinForm Wstawianie komponentów Aktywacja zegara będzie następowała w obsłudze zdarzenia „OnLoad”, a deaktywacja w procedurze obsługi zdarzenia „OnClosing” Zegar włączony ? Interwał czasowy Nazwa obiektu Copyright, 2004 © Adam Czajka
Wstawianie komponentów WinForm Wstawianie komponentów int licznik = 0; private void Form1_Load(object sender, System.EventArgs e) { timer1.Interval = 1000; timer1.Enabled = true; } private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) { timer1.Enabled = false; } private void timer1_Tick(object sender, System.EventArgs e) { licznik++; this.Text = licznik.ToString("D6"); } Copyright, 2004 © Adam Czajka
Wstawianie komponentów WinForm Wstawianie komponentów private void timer1_Tick(object sender, System.EventArgs e) { licznik++; if (licznik == 30) { Application.Exit(); return; } else { this.Text = licznik.ToString("D6"); } } Następuje bezwarunkowe zakończenie działania aplikacji Copyright, 2004 © Adam Czajka
Wstawianie komponentów WinForm Wstawianie komponentów Wstawiamy przycisk Copyright, 2004 © Adam Czajka
Wstawianie komponentów WinForm Wstawianie komponentów private void button1_Click(object sender, System.EventArgs e) { MessageBox.Show("To jest test "); } Po naciśnięciu przycisku, licznik cały czas zlicza sekundy Copyright, 2004 © Adam Czajka
Wstawianie komponentów WinForm Wstawianie komponentów using System.Threading; ............... private void button1_Click(object sender, System.EventArgs e) { for (int i=0; i<60; i++) { Thread.Sleep(500); } } Po naciśnięciu przycisku, licznik zatrzymuje się na okres 30 sekund Copyright, 2004 © Adam Czajka
Wstawianie komponentów WinForm Wstawianie komponentów using System.Threading; ............... private void button1_Click(object sender, System.EventArgs e) { for (int i=0; i<60; i++) { Application.DoEvents(); Thread.Sleep(500); } } Po naciśnięciu przycisku, licznik nie zatrzymuje się Copyright, 2004 © Adam Czajka
Wstawianie komponentów WinForm Wstawianie komponentów Application.DoEvents() Umożliwia przetworzenie wszystkich oczekujących zdarzeń (także tych związanych z odrysowywaniem okienka) Zaburza jednowątkowy charakter programu – teraz możliwe jest rozpoczęcie wykonywania obsługi drugiego zdarzenia bez zakończenia obsługi zdarzenia pierwszego Konieczne jest stosowanie obiektów synchronizujących dostęp do sekcji krytycznych programu !!! Copyright, 2004 © Adam Czajka
Copyright, 2004 © Adam Czajka WinForm Własne okno dialogowe Copyright, 2004 © Adam Czajka
Copyright, 2004 © Adam Czajka WinForm Własne okno dialogowe Copyright, 2004 © Adam Czajka
Copyright, 2004 © Adam Czajka WinForm Własne okno dialogowe Copyright, 2004 © Adam Czajka
Copyright, 2004 © Adam Czajka WinForm Własne okno dialogowe private void button1_Click(object sender, System.EventArgs e) { Form2 dlg = new Form2(); if (dlg.ShowDialog(this) == DialogResult.Yes) { MessageBox.Show("TAK"); } else { MessageBox.Show("NIE"); } } Copyright, 2004 © Adam Czajka
Wstawianie komponentów WinForm Wstawianie komponentów Po naciśnięciu przycisku, pojawia się modalne okno dialogowe - licznik nie zatrzymuje się Po upływie 30 sekund, niezależnie od stanu aplikacji jest ona bezwzględnie zamykana - metoda Application.Exit() Po naciśnięciu przycisku, modalne okno dialogowe zamyka się i pojawia się okno z komunikatem Copyright, 2004 © Adam Czajka
Copyright, 2004 © Adam Czajka Podsumowanie Aplikacja Obiekt WinForm Copyright, 2004 © Adam Czajka