Windows-Schulaufgabe/readme.md

772 lines
25 KiB
Markdown
Raw Permalink Normal View History

2021-03-10 15:05:51 +00:00
Fragenkatalog IT12/ AE, Schuljahr 2020/2021
Theorie:
2021-03-10 19:03:01 +00:00
**Windows Grundlagen:**
2021-03-10 15:05:51 +00:00
1. Welche Bedeutung hatte die Einführung grafischer Benutzeroberflächen für die Verbreitung von PCs?
2021-03-15 17:58:39 +00:00
- Die PCs wurden damit für die Massen einfach zu benutzen und verbreiteten sich deshalb sehr gut seit es GUIs gibt
2021-03-10 15:05:51 +00:00
2021-03-10 21:29:20 +00:00
2021-03-10 15:05:51 +00:00
2. Nennen Sie drei Merkmale von Windowsprogrammen!
2021-03-15 17:58:39 +00:00
- Oft mit .NET, C++, C# programmiert
- Benutzen die WindowsAPI
- Alle Benutzereingaben werden zuerst von Windows abgefangen und dann an das Programm gesendet für das es bestimmt war
2021-03-10 15:05:51 +00:00
2021-03-10 21:29:20 +00:00
2021-03-10 15:05:51 +00:00
3. Erläutern Sie den Unterschied zwischen einem Programm und einem Prozess!
2021-03-17 20:46:29 +00:00
- Ein Prozess kann Bestandteil eines Programms sein, es ist die bestimmte Aufgabe, die ausgeführt wird
- Ein Programm ist eine passive Entität, z.b. eine ausführbare Datei
2021-03-15 17:58:39 +00:00
- Ein Programm ist eine Bündelung vieler Prozesse um Funktionalität zu bieten
2021-03-10 15:05:51 +00:00
2021-03-10 21:29:20 +00:00
2021-03-10 15:05:51 +00:00
4. Was versteht man unter einer „Instanz eines Programms“?
2021-03-17 20:46:29 +00:00
- Jedes mal beim ausführen eines Programms, wird eine "Instanz" des Programms gestartet
- Beispielsweise: Visual Studio 2x öffnen => 2 voneinander unabhängige Instanzen von Visual Studio laufen
2021-03-10 15:05:51 +00:00
2021-03-10 21:29:20 +00:00
2021-03-10 15:05:51 +00:00
5. Beschreiben Sie die Aufgaben des Windows Betriebssystems, wenn eine neue Anwendung gestartet wird!
2021-03-15 17:58:39 +00:00
- zuerst wird in WinMain eine Fensterklasse während der Initialisierung erstellt
- Fensterklasse (als Structure vordefiniert) muss mit Infos zum Fenster und zu der Fensterfunktion gefüllt werden
- Fenster wird mit CreateWindow() erzeugt und mit ShowWindow() angezeigt
2021-03-17 20:46:29 +00:00
- UpdateWindow() aktualisiert die Anzeige
2021-03-10 15:05:51 +00:00
2021-03-10 21:29:20 +00:00
2021-03-10 15:05:51 +00:00
6. Beschreiben Sie die Aufgaben des Windows Betriebssystems, wenn eine Anwendung geschlossen wird!
2021-03-15 17:58:39 +00:00
- Benutzereingabe bekommt einen Eintrag in der Application-Queue
- Message Loop verarbeitet die Eingabe
- Windows wird angewiesen die Logik zur Programmbeendung auszuführen (Fenster schließen,
Programminstanz beenden, Speicher freigeben...)
2021-03-10 15:05:51 +00:00
2021-03-15 17:58:39 +00:00
7. Weshalb können unterschiedliche Anwendungen in Win32 nicht über Zeiger auf die gleiche Speicheradresse miteinander kommunizieren?
2021-03-10 15:05:51 +00:00
2021-03-15 17:58:39 +00:00
- Weil jeder Prozess seinen eigenen „Speicherraum“ besitzt und nicht auf Speicher eines anderen Prozesses zugreifen kann (Sandbox)
2021-03-10 15:05:51 +00:00
2021-03-10 21:29:20 +00:00
2021-03-10 15:05:51 +00:00
8. Welche Vorteile bieten multithreadingfähige Systeme?
2021-03-15 17:58:39 +00:00
- Abarbeitung mehrer Prozesse „gleichzeitig“
- „schneller“ (Effektiver Einsatz der CPU)
- Schnelle (low-latency) Kommunikation zwischen mehreren Prozessen eines Programms
2021-03-10 15:05:51 +00:00
2021-03-10 21:29:20 +00:00
2021-03-10 15:05:51 +00:00
--> https://docs.oracle.com/cd/E19455-01/806-3461/6jck06gqj/index.html
--> https://zone.ni.com/reference/de-XX/help/371361R-0113/lvconcepts/benefits_multi_apps/
2021-03-10 21:29:20 +00:00
2021-03-10 15:05:51 +00:00
9. Unterschied zwischen kooperativem und Preemptivem Multitasking?
Kooperatives Multitasking:
2021-03-15 17:58:39 +00:00
- gibt die volle CPU-Kontrolle an den auszuführenden Prozess ab und erhält sie erst
2021-03-17 20:46:29 +00:00
nach erfolgreicher abarbeitung des Prozesses wieder. (Crash-Problem z.B. unter DOS)
2021-03-10 15:05:51 +00:00
Preemptives Multitasking:
2021-03-15 17:58:39 +00:00
- System kann jederzeit (nach Ausführung jedes CPU-Befehls) die Kontrolle
2021-03-17 20:46:29 +00:00
über die CPU entziehen
2021-03-10 15:05:51 +00:00
2021-03-10 21:29:20 +00:00
2021-03-10 15:05:51 +00:00
10. Warum können „abgestürzte“ DOS-Programme das ganze OS Lahmlegen?
2021-03-17 20:46:29 +00:00
- wegen kooperativem Multitasking, das die volle Kontrolle der CPU an den Prozess abgibt
2021-03-10 15:05:51 +00:00
2021-03-10 21:29:20 +00:00
2021-03-10 15:05:51 +00:00
11. Abarbeitung einer Tastatureingabe über die Message Loop:
2021-03-17 20:46:29 +00:00
```
2021-03-10 15:05:51 +00:00
1. User drückt Taste
2. Eintrag des Ereignisses in die System-Queue
3. Eintrag in die Application-Queue
4. Message Loop verarbeitet das Ereignis
5. Windows wird angewiesen, die Fensterfunkton aufzurufen
6. Fensterfunktion reagiert auf die Tastatureingabe
2021-03-17 20:46:29 +00:00
```
2021-03-10 21:29:20 +00:00
2021-03-10 15:05:51 +00:00
12. Welche Aufgabe erfüllt die Fensterfunktion WinProc()?
Eine Art Event-Handler des Fensters der die eingehenden Botschaften empfängt und verarbeitet
2021-03-15 17:58:39 +00:00
- Z.B. die Botschaft WM_DESTROY -> Fenster schließen
- jedes Fenster definiert seine eigene Fensterfunktion
2021-03-10 15:05:51 +00:00
2021-03-10 21:29:20 +00:00
2021-03-10 15:05:51 +00:00
13. Beschreiben Sie den grundsätzlichen Aufbau einer Fensterfuktion unter Win32?
2021-03-17 20:46:29 +00:00
- Switch-Case mit verschiedenen Cases um die übergebenen Events zu verarbeiten
2021-03-10 15:05:51 +00:00
14. Bedeutung von Botschaften in ereignisgesteuerten Systemen
2021-03-15 17:58:39 +00:00
- Eventlistener greifen die Botschaften auf und entscheiden dann
anhand der Botschaft den weiteren Ablauf des Programms/Prozesses
2021-03-10 15:05:51 +00:00
15. Nennen Sie vier Schnittstellen für Windows - Programmierer und deren spezielles Anwendungsgebiet?
- WinInet - Windows Internet API
- GDI - Graphics Device Interface
2021-03-17 20:46:29 +00:00
- WinSock - API zum Zugriff auf Rechnernetz über Sockets
2021-03-10 15:05:51 +00:00
- TAPI - Telephone API (Fax, ...)
2021-03-17 20:46:29 +00:00
- COM-API - Für den Zugriff auf COM Schnittstellen
2021-03-10 15:05:51 +00:00
2021-03-10 21:29:20 +00:00
2021-03-10 15:05:51 +00:00
16. Welche Bedeutung hat die API für den Programmierer?
2021-03-17 20:46:29 +00:00
- Eine API bietet den Zugriff auf bestimmte vorgefertigte Funktionen an
- z.b. die CoinAPI zum Abgreifen von Kryptowährungs-Daten
2021-03-10 15:05:51 +00:00
2021-03-10 21:29:20 +00:00
2021-03-15 17:58:39 +00:00
17. Erläutern Sie, welches Wissen ein Windows - Anwendungsentwickler zusätzlich zur Kenntnis der Programmiersprache benötigt
2021-03-10 15:05:51 +00:00
- Windows API
- Fensterfunktion
- Message Loop
- .NET
- COM
18. Die vier Parameter der WinMain()
2021-03-17 20:46:29 +00:00
```
2021-03-10 15:05:51 +00:00
HINSTANCE hInstance, /* handle to current instance */
HINSTANCE hPrevInstance, /* handle to previous instance */
LPSTR lpCmdLine, /* pointer to command line */
int nCmdShow /* show state of window */
2021-03-17 20:46:29 +00:00
```
2021-03-10 15:05:51 +00:00
19. Die Windows API Fensterklasse:
2021-03-17 20:46:29 +00:00
- wird zum Beschreiben/Stylen des Fensters benutzt
2021-03-10 15:05:51 +00:00
20. Die Inhalte der Windows Fensterklasse
2021-03-17 20:46:29 +00:00
```
2021-03-10 15:05:51 +00:00
- style Style des Fensters
- lpfnWndProc Zeiger auf die Fensterfunktion (WndProc())
- hInstance Handle zur jetzigen Instanz
- hCursor Handle zu einer Cursor-Resource für Mouse-Moves
- hbrBackground Hintergrundfarbe des Fensters
- lpszClassName Pointer zum Klassennamen oder einem Alias dafür
2021-03-17 20:46:29 +00:00
```
2021-03-10 21:29:20 +00:00
2021-03-10 19:03:01 +00:00
**Grundlagen des .NET Frameworks**
21. Zweck der Common Language Runtime
2021-03-17 20:46:29 +00:00
```
2021-03-10 19:03:01 +00:00
- Die CLR übersetzt den MSIL-Code in nativen Code
- Memory Mangement
- Code Access security
- Garbage Collection
- JIT Compilation
- Exception Handling
2021-03-17 20:46:29 +00:00
```
2021-03-10 21:29:20 +00:00
2021-03-10 19:03:01 +00:00
22. Wozu dient Garbage Collection
- löscht nicht mehr benötigte Objekte/Zeiger zur Laufzeit
2021-03-15 17:58:39 +00:00
- befreit Speicher vom Prozess und beugt somit Memory Leaks vor
2021-03-10 19:03:01 +00:00
2021-03-10 21:29:20 +00:00
2021-03-10 19:03:01 +00:00
23. Weg vom Quellcode zur Ausführung in .NET
- Umwandlung des Code in MSIL
- Hinzufügen von Metadaten (wird in der gleichen Datei gespeichert)
- Vor der Ausführung wird MSIL durch den JIT Compiler der CLR in nativen Code übersetzt
Logische Schritte:
Compilation ---> Execution
Source-Code -> Language-Compiler -> MSIL + Metadaten -> JIT Compiler -> Native Code
2021-03-10 21:29:20 +00:00
2021-03-10 19:03:01 +00:00
24. Zweck der MSIL hinsichtlich hinsichtlich Programmiersprachen übergreifender Entwicklung von Software
Um möglichst viele Programmiersprachen/Techniken zu unterstützen wird der Code in MSIL als Zwischen-
sprache übersetzt.
2021-03-15 17:58:39 +00:00
- Da gewisse Teile des .NET Framework offen sind, ist es Drittherstellern möglich eigene Compiler
2021-03-10 19:03:01 +00:00
für ihre Programmiersprache zu erstellen
- Somit können in der Theorie alle Programmiersprachen, welche die Vorgaben von
MSIL (definiert in CLR) einhalten
2021-03-10 21:29:20 +00:00
2021-03-10 19:03:01 +00:00
25. Unterschied Klassenbezeichnung und Namensraum
Klassenbezeichnung:
Die Klassenbezeichnung ist der Name einer Klasse, die Klasse wird anhand der Klassenbezeichnung
im Quellcode als Objekt instanziiert.
Namensraum:
Ein Namensraum (engl. Namespace) ist ein Raum, der mehrere mehrere Klassen in ein Paket
zusammenfasst, um im Code Struktur und Ordnung zu gewährleisten. Diese Namensräume können
somit importiert werden um gewisse Teile des Codes voneinander abzugrenzen.
2021-03-10 21:29:20 +00:00
2021-03-10 19:03:01 +00:00
26. Zugriff auf eine bestimmte Klasse in einem Namensraum
- Anhand des Schlüsselworts "using" wird ein Namespace im Code eingebunden
- Auf die Klasse wird dann zugegriffen, wenn ein neues Objekt aus ihr instanziiert wird
Beispiel:
Import des Namespace: using System.IO.File;
Instanziierung der Klasse als Objekt: File datei = new File();
2021-03-10 21:29:20 +00:00
2021-03-10 19:03:01 +00:00
27. Basisklasse aller .NET Klassen
- Object
2021-03-10 21:29:20 +00:00
2021-03-10 19:03:01 +00:00
28. Zwei Arten von Datentypen unter .NET
2021-03-17 20:46:29 +00:00
- Char
2021-03-10 19:03:01 +00:00
- Ganzzahl (int)
2021-03-10 21:29:20 +00:00
2021-03-17 20:46:29 +00:00
29. Unterschied zwischen Reference- und Value-Types
2021-03-10 19:03:01 +00:00
2021-03-17 20:46:29 +00:00
- Ein Value-Type ist ein Datentyp, der die Werte direkt speichert
- Ein Reference-Type speichert nicht direkt Werte, sondern speichert die Adresse des Wertes im Arbeitsspeicher
z.B. Pointer oder String
2021-03-10 19:03:01 +00:00
2021-03-10 21:29:20 +00:00
2021-03-10 19:03:01 +00:00
30. Was ist Boxing/Unboxing
- Beim Boxing wird ein Child-Objekt in sein Parent-Objekt umgewandelt
- Beim Unboxing wird ein Parent-Objekt in eines seiner Child Objekt umgewandelt
Beispiel:
int i = 1;
object o = i; // boxing
int j = (int)o; // unboxing
2021-03-10 21:29:20 +00:00
2021-03-10 19:03:01 +00:00
31. Zweck der CLS
- Die CLS definiert die Regeln die von jeder Sprache im .NET Framework befolgt werden müssen
- Die Sprachen, die CLS befolgen sind CLS Compliant
-> CLS ermöglicht die Integration und Interoperabilität mehrerer Programmiersprachen im selben Projekt
2021-03-10 21:29:20 +00:00
2021-03-10 19:03:01 +00:00
32. Arten von Assemblies
2021-03-15 17:58:39 +00:00
- Private assembly (.dll and .exe are at the same place)
- Shared assembly(.dll and .exe are at different places)
- Dynamic assembly (dynamically create)
2021-03-10 19:03:01 +00:00
- Distributed assembly (in different parts)
- Satellite assembly (on the network)
2021-03-10 21:29:20 +00:00
2021-03-10 19:03:01 +00:00
33. Was ist der Global Assembly Cache
- Der GAC ist ein Verfahren des .NET Frameworks um Versionskonflikte in Programmen vorzubeugen
- Speichert alle Assemblies mit Name, Versionsnummer und einzigartigem Token
-> das gleiche Assembly kann mehrere Male gespeichert werden
2021-03-10 21:29:20 +00:00
2021-03-10 19:03:01 +00:00
34. Welche Informationen sind in einer Assembly gespeichert
- Name
- Versionsnummer
- Token
2021-03-10 21:29:20 +00:00
2021-03-10 19:03:01 +00:00
35. Was ist Side By Side Installation
- Mehrere Installationen des selben Assemblies
2021-03-10 21:29:20 +00:00
2021-03-10 19:03:01 +00:00
36. Was ist Probing im .NET Framework
2021-03-17 20:46:29 +00:00
- Gibt Anwendungen das Basisverzeichnis für die Common Language Runtime an,
die beim Laden des Assembly gesucht werden soll
2021-03-10 21:29:20 +00:00
2021-03-10 19:03:01 +00:00
**ADO.NET**
37. Connected <> Disconnected Modell
2021-03-17 20:46:29 +00:00
```
2021-03-10 19:03:01 +00:00
Connected:
- Beständige Verbindung zur Datenbank
- Daten sind immer aktuell
- DataReader versichert die beständige Verbindung
- Mehr Netzwerkauslastung beim Server
Disconnected:
- Verbindung zur Datenbank nur bei Zugriff
- mehr Auslastung beim Client, da Daten im Arbeitsspeicher
- Benutzen von DataSet beim Datenbankzugriff
2021-03-17 20:46:29 +00:00
```
2021-03-10 21:29:20 +00:00
38. DataProvider und DataSet aus ADO.NET
2021-03-17 20:46:29 +00:00
```
2021-03-10 21:29:20 +00:00
DataProvider:
2021-03-15 17:58:39 +00:00
- wird zum Herstellen der Verbindung mit einer Datenbank benutzt
2021-03-10 21:29:20 +00:00
- führt Befehle auf der Datenbank aus
2021-03-15 17:58:39 +00:00
- wird im Connected Modell benutzt um Daten aus der Datenbank zu lesen/schreiben
2021-03-10 21:29:20 +00:00
DataSet:
2021-03-15 17:58:39 +00:00
- Kommt beim Disconnected Modell zum Einsatz
2021-03-10 21:29:20 +00:00
- Bildet die Datenbank ab
- Dient als Lokaler Speicher der Datenbank auf dem Client
- ist als Cache für die Daten zu betrachten
2021-03-17 20:46:29 +00:00
```
2021-03-10 21:29:20 +00:00
39. Nachteile der OLE-DB und ODBC.NET DataProvider
- Langsamer als native Datenbanktreiber
- benötigt mehr CPU-Ressourcen
2021-03-15 17:58:39 +00:00
- weitere Schicht zwischen Programm und Datenbank -> höhere Fehleranfälligkeit
2021-03-10 21:29:20 +00:00
- Viele OLE und ODBC Treiber in .NET stammen aus der COM zeit und sind veraltet
40. Vor- und Nachteile des Connected- bzw Disconnected Modells
2021-03-17 20:46:29 +00:00
```
2021-03-10 21:29:20 +00:00
Connected:
Vorteile:
- Daten sind immer aktuell
- Einfachere Wartung
Nachteile:
- Mehr Netzwerkauslastung beim Server
- Ständige Netzwerkverbindung erforderlich
Disconnected:
Vorteile:
- Keine Ständige Netzwerkverbindung erforderlich
- Weniger Netzwerkauslastung
- Skalierbarkeit und Performance
Nachteile:
- Daten sind nicht aktuell
- Daten müssen beim Client im Arbeitsspeicher abgelegt werden
- Konkurrierende Zugriffe
2021-03-17 20:46:29 +00:00
```
2021-03-10 21:29:20 +00:00
41. Einsatzbeispiele von Disconnected- und Connected Modells:
2021-03-17 20:46:29 +00:00
```
2021-03-10 21:29:20 +00:00
Connected:
- Warenwirtschaftssystem
- Büro/Office Umgebungen
Disconnected:
- Smartphone Apps
- Außendienstmitarbeiter
2021-03-17 20:46:29 +00:00
```
2021-03-10 21:29:20 +00:00
42. Aufgaben des Connection Objects, Command Objects, Parameter Objects und des DataReader Objects
2021-03-17 20:46:29 +00:00
```
2021-03-10 21:29:20 +00:00
Connection Object:
- stellt eindeutige Verbindung/Sitzung zum Datenbankserver/Datenquelle dar
2021-03-15 17:58:39 +00:00
- Verbindung mit Server
2021-03-10 21:29:20 +00:00
Command Object:
- eine SQL-Anweisung oder gespeicherte Prozedur die in einer Datenbank ausgeführt werden soll
Parameter Object:
2021-03-15 17:58:39 +00:00
- SQL-Injection Mitigation
- damit kann man parameterisierte Abfragen erstellen, die WHERE statements obsolet machen
2021-03-10 21:29:20 +00:00
DataReader Object:
2021-03-15 17:58:39 +00:00
- stellt Verfahren zum Lesen eines Vorwärtsstreams von Zeilen in einer Datenbank bereit
2021-03-17 20:46:29 +00:00
```
2021-03-10 21:29:20 +00:00
43. Einschränkungen beim benutzen eines DataReaders:
2021-03-15 17:58:39 +00:00
- ReadOnly / ForwardOnly Zugriff
- nur für schnelles, einmaliges Lesen geeignet
2021-03-10 21:29:20 +00:00
44. Zusammenarbeit von DataAdapter, DataSet und DataTables im Disconnected Modell:
2021-03-17 20:46:29 +00:00
```
2021-03-15 17:58:39 +00:00
- DataAdapter verfügt über SELECT command - Object welches Daten aus der DB holt
- die Fill-Methode des DataAdapter erwartet als Parameter ein DataSet
und einen Namen für das zu erstellende DataTable Objects
2021-03-10 21:29:20 +00:00
- erzeugung im jeweils übergebenen DataSet ein DataTable Object
2021-03-15 17:58:39 +00:00
- beim Update der DB wird je nach Änderung das INSERT, UPDATE oder DELETE Command des DataAdapters aufgerufen
- DataAdapter stellt das Bindeglied zwischen DataSet Tabelle und DB dar
2021-03-10 21:29:20 +00:00
- pro DataTable eines DataSets gibt es idR. einen DataAdapter
2021-03-17 20:46:29 +00:00
```
2021-03-10 21:29:20 +00:00
45. Die 4 Command Objecte eines DataAdapters
SELECT Command-Object:
2021-03-15 17:58:39 +00:00
- Lesen von Daten aus der DB
2021-03-10 21:29:20 +00:00
UPDATE Command-Object:
2021-03-15 17:58:39 +00:00
- Ändern von Datensätzen
2021-03-10 21:29:20 +00:00
INSERT Command-Object:
2021-03-15 17:58:39 +00:00
- Einfügen neuer Datensätze
2021-03-10 21:29:20 +00:00
DELETE Command-Object:
2021-03-15 17:58:39 +00:00
- Löschen von Daten
2021-03-10 21:29:20 +00:00
46. Collections und Objekte eines DataSets
- Tables
- Columns
- Constraints
- Rows
- Relations
***SEE SHARP PROGRAMMIERUNG***
47. Abfangen von Ereignissen unter C#
2021-03-11 21:38:46 +00:00
- Eventhandler registrieren um auf Ereignisse zu reagieren
- Delegate Prinzip (objektorientierte Variante von Methodenzeigern)
48. Eventhandling unter .NET am Beispiel eines Klicks auf einen Button
EVENT(click)
Button BtnBeispiel -> Delegate -> Handler-Methode
49. Syntax von c# Eventhandling unter .NET
BtnBeispiel.click() += new System.EventHandler(BtnBeispiel_Click);
private void BtnBeispiel_Click(object sender, System.EventArgs e) {
// do Button shit
}
50. Parameter einer Handler - Methode:
2021-03-17 20:46:29 +00:00
```
2021-03-15 17:58:39 +00:00
Object sender:
2021-03-11 21:38:46 +00:00
- der sender des Events (der Button in unserem Beispiel)
2021-03-15 17:58:39 +00:00
- Komplettes Button Objekt inkl seiner Eigenschaften usw.
2021-03-11 21:38:46 +00:00
System.EventArgs e:
- Eigenschaften des Events
2021-03-17 20:46:29 +00:00
- z.B.: Koordinaten des Klick Events f
```
2021-03-10 21:29:20 +00:00
2021-03-11 21:38:46 +00:00
51. Events eines Windows Forms:
2021-03-10 21:29:20 +00:00
2021-03-12 20:49:51 +00:00
- Click
- FormClosing
- Touch
52. Parameter der Show Methode von MessageBox
2021-03-17 20:46:29 +00:00
```
2021-03-12 20:49:51 +00:00
- owner | Implementierung von IWin32Window, wird Besitzer des Dialogfeldes
- text | Text im Fenster
- caption | Titel in der Fensterleiste
- buttons | Ja/Nein/Abbrechen etc. buttons
- icon | Symbol im Meldungsfenster
- defaultButton | Standardbutton von buttons
- options | Anzeige- und Zuordnungsoptionen
- helpFilePath | Pfad für die Hilfedatei, wenn auf "Hilfe" geklickt wird
- keyword | Hilfestichwort
2021-03-17 20:46:29 +00:00
```
2021-03-12 20:49:51 +00:00
53. Einsatz der FileSystemWatcher Komponente
2021-03-10 21:29:20 +00:00
2021-03-12 20:49:51 +00:00
- Überwachung von Dateien bzw. Ordnerstrukturen
- Löst ein Ereignis aus bei Änderungen
2021-03-10 21:29:20 +00:00
2021-03-12 20:49:51 +00:00
-> Übergabe von verschiedenen Eventhandlern an den FileSystemWatcher
Beispielsweise Changed, Created, Deleted, Renamed
2021-03-10 21:29:20 +00:00
2021-03-12 20:49:51 +00:00
54. Eigenschaften und Methoden eines Exception Objekt
2021-03-17 20:46:29 +00:00
```
2021-03-15 17:58:39 +00:00
- Das Exception Objekt wird in try - catch Blöcken verwendet
2021-03-17 20:46:29 +00:00
und wird zum Behandeln von Ausnahmen in der Programmlogik verwendet
2021-03-12 20:49:51 +00:00
Eigenschaften:
- Stacktrace
- Message
2021-03-10 21:29:20 +00:00
2021-03-12 20:49:51 +00:00
Methoden:
- GetBaseException | Gibt Exception zurück bei einem von Exception abgeleitetem Objekt wie z.B. IOException
- GetObjectData | Setzt die SerializationInfo
- GetType | Gibt den Typ der Exception zurück wie z.B. IOException
- ToString | Gibt die Exception Message als String zurück
2021-03-17 20:46:29 +00:00
```
2021-03-15 17:58:39 +00:00
2021-03-12 20:49:51 +00:00
55. Exception Handling Erklärung
- Mit try - catch kann man eine Exception abfangen
- Im try Block ist der Code, der möglicherweise eine Ausnahme auslöst und wird in catch abgefangen
- Der catch Block wird üblicherweise zum Logging der Exception verwendet, oder die Exception wird weiterverarbeitet
- mit *throw new Exception()* kann man absichtlich eine Exception auslösen
2021-03-15 17:58:39 +00:00
2021-03-12 20:49:51 +00:00
56. Eigene Exception erstellen
2021-03-15 17:58:39 +00:00
- Klasse von Exception (oder abgeleiteter Exception Klasse) ableiten
2021-03-17 20:46:29 +00:00
- Konstruktor der Basisklasse für die Fehlermeldung nutzen
2021-03-12 20:49:51 +00:00
public class myException: System.Exception
{
public myException():base(“Spezielle Fehlermeldung”)
{
...
}
}
2021-03-15 17:58:39 +00:00
2021-03-12 20:49:51 +00:00
57. Vorteile des Structured Exception Handling
- Trennung von Programm und Fehlerlogik
- genaue Fehlerbeschreibung inkl Zusatzinformationen
- abfangen mehrerer Exceptions möglich
2021-03-15 17:58:39 +00:00
2021-03-17 20:46:29 +00:00
58. Serialisierung/Deserialisierung
```
Unter Serialisierung versteht man das Speichern eines Objektes auf einem beständigen Speichermedium und das Wiederherstellen des Objektes anhand seiner Daten im Programm.
2021-03-12 20:49:51 +00:00
(Deserialisierung)
2021-03-17 20:46:29 +00:00
-> https://stackoverflow.com/questions/3042665/what-is-the-meaning-of-serialization-in-programming-languages
```
2021-03-15 17:58:39 +00:00
2021-03-12 20:49:51 +00:00
59. Unterschiede zwischen Binary und XML Serialisierung
XML:
- Overhead durch XML Tags
- lesbarer Code -> flexibel
- nur public Elemente werden serialisiert
Binary:
- schnell lesbar, klare Datei
- Binärformat ist unflexibel
- private Elemente werden mitserialisiert
2021-03-15 17:58:39 +00:00
2021-03-12 20:49:51 +00:00
60. Erstellung einer serialisierten Klasse
[Serializable]
public class SerializableClass {
public int Aersche = 15;
public int x = 0;
2021-03-17 20:46:29 +00:00
public String str = null;
2021-03-12 20:49:51 +00:00
}
2021-03-15 17:58:39 +00:00
2021-03-12 20:49:51 +00:00
61. Umsetzung der binären Serialisierung | https://www.guru99.com/c-sharp-serialization.html
- Serializable Klasse erstellen
- Objekt von Serializable Klasse erstellen und den Attributen Werte zuweisen
- BinaryFormatter erstellen
- Beispielszenario: Stream öffnen zum Lesen der Datei die serialisiert werden soll
- Mit BinaryFormatter.Serialize eingelesenen Stream und Serializable Objekt serialisieren
- Stream schließen mit .Close()
2021-03-15 17:58:39 +00:00
2021-03-12 20:49:51 +00:00
62. Implementierung von XML Serialisierung
```
MyClass obj1 = new MyBeispiel( );
XmlSerializer s = new XmlSerializer(typeof(MyBeispiel));
FileStream fs;
// Serialisieren
fs = new FileStream(@"C:\test.txt", FileMode.Create);
s.Serialize(fs, obj1);
fs.Close( );
// Deserialisierung
fs = new FileStream(@"C:\test.txt", FileMode.Open);
MyClass obj2 = (MyClass) s.Deserialize(fs);
fs.Close( );
```
2021-03-15 17:58:39 +00:00
2021-03-12 20:49:51 +00:00
63. DataBindingSource Objekt
Die BindingSource Komponente dient vielen Zwecken.
Das Binden von Steuerelementen in einem Formular an Daten wird vereinfacht,
indem Währungsverwaltung, Änderungs Benachrichtigung und andere Dienste zwischen
Windows Forms Steuerelementen und Datenquellen bereitgestellt werden.
DataSetTabelle --- DataBindingSource Objekt --- Steuerelement
2021-03-15 17:58:39 +00:00
2021-03-12 20:49:51 +00:00
64. Simple und Complex Binding von Steuerelementen
2021-03-15 17:58:39 +00:00
Beim simple binding bindet man nur eine Eigenschaft an einen
Datensatz (z.B. die Text-Property eines Textfeldes an den Namen des Personenobjekts).
Verwendet man das complex binding, so werden mehrere Datensätze an ein Steuerelement
gebunden (z.B. alle Daten mehrerer Datensätze an ein DataGrid oder alle Namen an eine ComboBox).
2021-03-12 20:49:51 +00:00
65. BindingNavigator Objekt
The BindingNavigator control represents a standard way
to navigate and manipulate data on a form. It is a special-purpose
ToolStrip control for navigating and manipulating controls on the Windows Form.
In most cases, a BindingNavigator is combined with a BindingSource control to
move through data records on a Windows Form. It is easy to modify the
BindingNavigator component if you want to add additional or alternative
commands for the user.
A BindingNavigator is:
- a VCR (video-cassette recorder) control which is used with BindingSource.
- based on ToolStrip.
- extensible and pluggable.
2021-03-15 17:58:39 +00:00
2021-03-12 20:49:51 +00:00
66. Zweck einer DAO Klasse
```
DAO - Klasse (Data Access Object):
- Entwurfsmuster das den Zugriff auf unterschiedliche Arten von Datenquellen
- Muster für die Gestaltung von APIs
- Datenadapter der Applikation
- speichert z.b. Daten in einer privaten List Collection
- ist für die Serialisierung und Deserialisierung zuständig
- meist werden Methoden wie SaveData() ausprogrammiert
-> Data Access Object Klassen kapseln die Serialisierung/ Deserialisierung von Objekten.
Programmlogik und Datenverwaltung sind getrennt!
```
2021-03-15 17:58:39 +00:00
2021-03-12 20:49:51 +00:00
67. Aufgabe des Gerätekontextes beim Druck in C#
- Graphics Eigenschaft der Klasse PrintPageEventArgs
- Informiert den Drucker welche Art von Grafiken gedruckt werden
```
private void printDocument1_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.FillRectangle(Brushes.Blue,
new Rectangle(100, 150, 250, 250));
}
```
Der Gerätekontext stellt eine einheitliche Schnittstelle zur Ausgabe von Daten auf Ausgabegeräte
bereit („virtuelle Zeichenleinwand“). Somit wird eine hardwareunabhängige Ausgabelogik im
Programm möglich.
2021-03-15 17:58:39 +00:00
2021-03-12 20:49:51 +00:00
68. Warum funktioniert die Druckvorschau ohne installierten Drucker nicht?
Weil kein Druckertreiber verfügbar ist.
2021-03-15 17:58:39 +00:00
2021-03-12 20:49:51 +00:00
69. Prinzipieller Druckvorgang unter C#
Druckvorgang:
SIEHE "Zusammenfassung zum Adressbuch3 TA.pdf"
1 PrintDocument Object erzeugen
```
PrintPage Event -> Handler-Methode für Drucklogik
PrintPageEventArgs:
PageSettings Property des PrintDocuments (Seiteneinstellungen)
Graphics Object (Device Context)
HasMorePages Property (true setzen, wenn noch weitere Seiten gedruckt werden sollen…)```
2 Seitenränder setzen
-> PageSattings Objekt -> Margins… (Left, Rightt, Top, Bottom) setzen.
3 Bedruckbaren Bereich ermitteln
-> PrintPageEventArgs e -> MarginBounds… (Left, Rightt, Top, Bottom) nutzen.
4 Schriftarten erstellen
-> Im .NET Framework nutzt man die Font Klasse zum Erstellen von Schriften:
```
Font headerFont = new Font ("Arial",18, FontStyle.Bold);
```
5 Schriftarten messen zur Positionsberechnung
-> Über das Graphics Objekt können Schriften gemessen werden.
MeasureString(String text, Font font)… (Width, Height)
```
float headerWidth = g.MeasureString(header, headerFont).Width;
```
6 DrawString(...) des Graphics Objects
-> Zeichnet einen String an die angegebene Position auf den Device Context.
```
g.DrawString(text, schrift, brush, xPosition, yPosition);
```
2021-03-15 17:58:39 +00:00
2021-03-12 20:49:51 +00:00
70. Welche Elemente sind in PrintPageEventArgs
Eigenschaften:
- Cancel
- Graphics
- HasMorePages
- MarginBounds
- PageBounds
- PageSettings
Methoden:
- Equals(Object)
- GetHashCode()
- GetType()
- MemberwiseClone()
- ToString()
2021-03-15 17:58:39 +00:00
2021-03-12 20:49:51 +00:00
71. Benutzerdialoge zur Druckunterstützung
- PrintDialog
- PrintPreviewDialog
- PageSetupDialog
2021-03-15 17:58:39 +00:00
2021-03-12 20:49:51 +00:00
72. Einrichten von Seitenränder
Seitenränder setzen
2021-03-17 20:46:29 +00:00
-> PageSettings Objekt -> Margins… (Left, Right, Top, Bottom) setzen
2021-03-12 20:49:51 +00:00
2021-03-15 17:58:39 +00:00
2021-03-12 20:49:51 +00:00
73. Vorgehensweise zum Ermitteln des bedruckbaren Bereichs
Bedruckbaren Bereich ermitteln
2021-03-17 20:46:29 +00:00
-> PrintPageEventArgs e -> MarginBounds… (Left, Right, Top, Bottom) nutzen
2021-03-12 20:49:51 +00:00
2021-03-15 17:58:39 +00:00
2021-03-12 20:49:51 +00:00
74. Initialisierung einer Schriftart
Schriftarten erstellen
-> Im .NET Framework nutzt man die Font Klasse zum Erstellen von Schriften:
```
Font headerFont = new Font ("Arial",18, FontStyle.Bold);
```
2021-03-15 17:58:39 +00:00
2021-03-12 20:49:51 +00:00
75. Höhe und Breite eines Textes zur Textpositionierung berechnen
- Graphics.MeasureString() verrechnet Font mit String
->This method returns a SizeF structure that represents
the size, in the units specified by the PageUnit property,
of the string specified by the text parameter as drawn
with the font parameter.
2021-03-15 17:58:39 +00:00
2021-03-12 20:49:51 +00:00
76. DrawString Funktionsweise
Draws the specified text string at the specified location with the specified Brush and Font objects.
2021-03-17 20:46:29 +00:00
```
2021-03-12 20:49:51 +00:00
Parameter:
String s | String der gezeichnet werden soll
Font font | Text Format des Strings
Brush brush | Farbe und Textur des gezeichneten Text
Single x | x Koordinate des Text
Single y | Y Koordinate des Text
2021-03-17 20:46:29 +00:00
```
2021-03-12 20:49:51 +00:00
2021-03-10 19:03:01 +00:00
Legende:
- MSIL : Microsoft Intermediate Language (auch CIL - Common Intermediate Language)
- CLR : Common Language Runtime
- CLS : Common Language Specification
- JIT : Just in Time
- COM : Component Object Model
2021-03-12 20:49:51 +00:00
- DAO : Data Access Object