Java
this
Das Schlüsselwort this bezieht sich auf das aktuelle Objekt in einer Methode oder einem Konstruktor.
Parameter
An Methoden können Informationen als Parameter übergeben werden. Parameter fungieren als Variablen innerhalb der Methode.
Parameter werden nach dem Methodennamen innerhalb der Klammern angegeben. Sie können beliebig viele Parameter hinzufügen, trennen Sie sie einfach durch ein Komma.
public class Main {
static void myMethod(String fname, int age) {
return(fname + " is " + age);
}
public static void main(String[] args) {
System.out.println(myMethod("Liam", 51));
}
}
Objekte
In Java wird ein Objekt aus einer Klasse erstellt. Wir haben bereits eine Klasse namens Main erstellt und können diese nun zum Erstellen von Objekten verwenden.
Um ein Objekt von Main zu erstellen, geben Sie den Klassennamen an, gefolgt von dem Objektnamen, und verwenden Sie das Schlüsselwort new
//In Java Swing
JButton button = new JButton();
//eine eine ein Objekt aus einer Klasse konstruieren
Heater hotter = new Heater();
Instanzvariablen/Attribut
Eine nicht statische Variable, die innerhalb der Klasse, aber nicht in der Methode deklariert ist, wird als Instanzvariable bezeichnet. Instanzvariablen sind auf ein bestimmtes Objekt bezogen; sie können auf Klassenvariablen zugreifen.
Referenzvariablen
Mit Referenzvariablen macht man Beziehungen zu einer Variabel
Heater <hotter> = new Heater();
hotter.warmer();
Konstruktor
Ist eine spezielle Methode, die beim aufrufen einer Klasse ausgeführt wird.
public Heater() {
this.min = -15;
this.max = 30;
this.increment = 5;
this.temperature = 15;
}
//Verketteter Konstruktor
public Heater(int min, int max)
{
this.min = min;
this.max = max;
this.increment = 5;
this.temperature = 15;
}
Attribute
Attribute sind Variablen bzw. Klassenattribute die innerhalb einer Klasse sind aber ausserhalb einer Methode ist. Sie sind mit Instanzvariablen gleichzusetzen.
Methoden
Eine Methode ist ein Codeblock, der nur ausgeführt wird, wenn er aufgerufen wird.
Sie können einer Methode Daten, so genannte Parameter, übergeben.
Methoden werden verwendet, um bestimmte Aktionen auszuführen, und sie werden auch als Funktionen bezeichnet.
Warum Methoden verwenden? Um Code wiederzuverwenden: den Code einmal definieren und dann mehrfach verwenden.
//example
public void methode(int vari1, int vari2) {
return vari1 + vari2;
}
//echtes example
public void warmer() {
if ((temperature + increment) <= this.max) {
temperature += increment;
}
}
Methoden kann man folgendermassen aufrufen:
//Aus der Main mit einer Referenzvariablel
hotter.warmer();
//Aus der Class selber
warmer();
Setter und Getter Methoden
Ist ein Programmierkonezpt wie man Methoden in Klassen definiert. Die Methoden können genutzt werden um Daten aufzurufen bzw. zu verändern. Da durch den Zugriffsmodifizierter “private” Methoden oder Variablen nur in der eigenen Klasse existieren kann und somit nicht von aussen zugegriffen werden kann, braucht es eine Methode um dies sicher zu realisieren.
Modifiers
| Modifier | Description |
|---|---|
| public | The code is accessible for all classes |
| private | The code is only accessible within the declared class |
| default | The code is only accessible in the same package. This is used when you don’t specify a modifier. You will learn more about packages in the Packages chapter |
| protected | The code is accessible in the same package and subclasses. You will learn more about subclasses and superclasses in the Inheritance chapter |
| final | Attributes and methods cannot be overridden/modified |
| static | Attributes and methods belongs to the class, rather than an object |
| abstract | Can only be used in an abstract class, and can only be used on methods. The method does not have a body, for example abstract void run();. The body is provided by the subclass (inherited from). You will learn more about inheritance and abstraction in the Inheritance and Abstraction chapters |
| transient | Attributes and methods are skipped when serializing the object containing them |
| synchronized | Methods can only be accessed by one thread at a time |
| volatile | The value of an attribute is not cached thread-locally, and is always read from the “main memory” |
Static
Eine Variable die in allen Objekten den gleichen Wert hat. Ausserdem kann man damit Methoden/Attribute aufrufen ohne ein Objekt zu erstellen bzw. Sie Statischen Variablen/Methoden existieren nach der Initialisierung der Instanzvariablen. Dies ist bei der Main Methode der fall. Ohne den Parameter “Static” kann die Main-Methode nicht ausgeführt werden.
Variablen
Variablen sind Container zum Speichern von Datenwerten.
| Data Type | Size | Description |
|---|---|---|
| byte | 1 byte | Stores whole numbers from -128 to 127 |
| short | 2 bytes | Stores whole numbers from -32,768 to 32,767 |
| int | 4 bytes | Stores whole numbers from -2,147,483,648 to 2,147,483,647 |
| long | 8 bytes | Stores whole numbers from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 |
| float | 4 bytes | Stores fractional numbers. Sufficient for storing 6 to 7 decimal digits |
| double | 8 bytes | Stores fractional numbers. Sufficient for storing 15 decimal digits |
| boolean | 1 bit | Stores true or false values |
| char | 2 bytes | Stores a single character/letter or ASCII values |
| string | 2,048 bytes | The String data type is used to store a sequence of characters (text) |
Initialisierung
Das Initialisieren von Variablen
int myNum;
Deklaration
Eine Deklaration ist eine die Zuweisung eines Wertes bei einer Variable
int myNum = 15;
System.out.println(myNum);
String
String Length
String txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
System.out.println("The length of the txt string is: " + txt.length());
Finding a Character in a String
String txt = "Please locate where 'locate' occurs!";
System.out.println(txt.indexOf("locate")); // Outputs 7
String Concatenation
String firstName = "John ";
String lastName = "Doe";
System.out.println(firstName.concat(lastName));
Numbers and Strings
int x = 10;
int y = 20;
int z = x + y; // z will be 30 (an integer/number)
String x = "10";
String y = "20";
String z = x + y; // z will be 1020 (a String)
More String Methods
String txt = "Hello World";
System.out.println(txt.toUpperCase()); // Outputs "HELLO WORLD"
System.out.println(txt.toLowerCase()); // Outputs "hello world"
Math.max(x,y)
Die Methode Math.max(_x_,_y_) kann verwendet werden, um den höchsten Wert von x und y zu finden:
Math.max(5, 10);
Math.min(x,y)
Die Methode Math.min(_x_,_y_) kann verwendet werden, um den kleinsten Wert von x und y zu finden:
Math.min(5, 10);
Math.sqrt(x)
Die Methode Math.sqrt(_x_) gibt die Quadratwurzel von x zurück:
Math.sqrt(64);
Math.abs(x)
Die Methode Math.abs(_x_) gibt den absoluten (positiven) Wert von x zurück:
Math.abs(-4.7);
Random Numbers
Math.random()` gibt eine Zufallszahl zwischen 0,0 (einschließlich) und 1,0 (ausschließlich) zurück:
Math.random();
Um eine bessere Kontrolle über die Zufallszahl zu erhalten, wenn Sie beispielsweise nur eine Zufallszahl zwischen 0 und 100 wünschen, können Sie die folgende Formel verwenden:
int randomNum = (int)(Math.random() * 101); // 0 to 100
Arrays
Arrays werden verwendet, um mehrere Werte in einer einzigen Variablen zu speichern, anstatt separate Variablen für jeden Wert zu deklarieren.
Um ein Array zu deklarieren, definieren Sie den Variablentyp mit eckigen Klammern:
String[] cars = {"Volvo", "BMW", "Ford", "Mazda"};
Sie können auf ein Array-Element zugreifen, indem Sie sich auf die Indexnummer beziehen.
Diese Anweisung greift auf den Wert des ersten Elements in cars zu:
String[] cars = {"Volvo", "BMW", "Ford", "Mazda"};
System.out.println(cars[0]);
// Outputs Volvo
Um den Wert eines bestimmten Elements zu ändern, geben Sie die Indexnummer an:
String[] cars = {"Volvo", "BMW", "Ford", "Mazda"};
cars[0] = "Opel";
System.out.println(cars[0]);
// Now outputs Opel instead of Volvo
Um herauszufinden, wie viele Elemente ein Array hat, verwenden Sie die Eigenschaft length:
String[] cars = {"Volvo", "BMW", "Ford", "Mazda"};
System.out.println(cars.length);
// Outputs 4
Ein mehrdimensionales Array ist ein Array von Arrays.
Um ein zweidimensionales Array zu erstellen, fügen Sie jedes Array in einen eigenen Satz geschweifter Klammern ein:
int[][] myNumbers = { {1, 2, 3, 4}, {5, 6, 7} };
int x = myNumbers[1][2];
System.out.println(x);
// Outputs 7
Operatoren
| Operator | Name | Description | Example |
|---|---|---|---|
| + | Addition | Adds together two values | x + y |
| - | Subtraction | Subtracts one value from another | x - y |
| * | Multiplication | Multiplies two values | x * y |
| / | Division | Divides one value by another | x / y |
| % | Modulus | Returns the division remainder | x % y |
| ++ | Increment | Increases the value of a variable by 1 | ++x |
| -- | Decrement | Decreases the value of a variable by 1 | --x |
Comparison Operators
| Operator | Name | Description | Example |
|---|---|---|---|
| && | Logical and | Returns true if both statements are true | x < 5 && x < 10 |
| || | Logical or | Returns true if one of the statements is true | x < 5 || x < 4 |
| ! | Logical not | Reverse the result, returns false if the result is true | !(x < 5 && x < 10) |
Logical Operators
| Operator | Name | Description | Example |
|---|---|---|---|
| && | Logical and | Returns true if both statements are true | x < 5 && x < 10 |
| || | Logical or | Returns true if one of the statements is true | x < 5 || x < 4 |
| ! | Logical not | Reverse the result, returns false if the result is true | !(x < 5 && x < 10) |
Assignment Operators
| Operator | Example | Same As |
|---|---|---|
| = | x = 5 | x = 5 |
| += | x += 3 | x = x + 3 |
| -= | x -= 3 | x = x - 3 |
| *= | x *= 3 | x = x * 3 |
| /= | x /= 3 | x = x / 3 |
| %= | x %= 3 | x = x % 3 |
| &= | x &= 3 | x = x & 3 |
| |= | x |= 3 | x = x | 3 |
| ^= | x ^= 3 | x = x ^ 3 |
| >>= | x >>= 3 | x = x >> 3 |
| <<= | x <<= 3 | x = x << 3 |
Escape sequences/character
| Code | Result |
|---|---|
| \n | New Line |
| \r | Carriage Return |
| Tab | |
| \b | Backspace |
| \f | Form Feed |
Da Zeichenketten in Anführungszeichen geschrieben werden müssen, wird Java diese Zeichenkette falsch verstehen und einen Fehler erzeugen:
| Escape character | Result | Description |
|---|---|---|
| \' | ' | Single quote |
| \" | " | Double quote |
| \\ | \ | Backslash |
//falsch
String txt = "We are the so-called "Vikings" from the north.";
//richtig
String txt = "We are the so-called \"Vikings\" from the north.";
Ein und Ausgabe Routinen
Ausgabe von Text/Zahlen/Variablen
//Text
System.out.println("Hello World!");
//Zahlen
System.out.println(50000);
System.out.println(1+1);
//Variablen
System.out.println("Hello" + name);
Die Klasse Scanner wird zum Abrufen von Benutzereingaben verwendet und befindet sich im Paket java.util.
Um die Scanner-Klasse zu verwenden, erstellen Sie ein Objekt der Klasse und verwenden eine der verfügbaren Methoden, die in der Dokumentation der Scanner-Klasse zu finden sind. In unserem Beispiel werden wir die Methode nextLine() verwenden, die zum Lesen von Strings verwendet wird:
Scanner myObj = new Scanner(System.in); // Create a Scanner object
System.out.println("Enter username");
String userName = myObj.nextLine(); // Read user input
System.out.println("Username is: " + userName); // Output user input
| Method | Description |
|---|---|
| nextBoolean() | Reads a boolean value from the user |
| nextByte() | Reads a byte value from the user |
| nextDouble() | Reads a double value from the user |
| nextFloat() | Reads a float value from the user |
| nextInt() | Reads a int value from the user |
| nextLine() | Reads a String value from the user |
| nextLong() | Reads a long value from the user |
| nextShort() | Reads a short value from the user |
IF, Else, Switch, For, For-Each
if (condition1) {
// block of code to be executed if condition1 is true
} else if (condition2) {
// block of code to be executed if the condition1 is false and condition2 is true
} else {
// block of code to be executed if the condition1 is false and condition2 is false
}
switch(expression) {
case x:
// code block
break;
case y:
// code block
break;
default:
// code block
}
while (condition) {
// code block to be executed
}
for (statement 1; statement 2; statement 3) {
// code block to be executed
}
for (type variableName : arrayName) {
// code block to be executed
}
Break & Continue
continue
Die continue-Anweisung unterbricht eine Iteration (in der Schleife), wenn eine bestimmte Bedingung eintritt, und fährt mit der nächsten Iteration in der Schleife fort.
for (int i = 0; i < 10; i++) {
if (i == 4) {
continue;
}
System.out.println(i);
}
break
Die Break Anweisung kann man Verwenden um aus einer Schleife herauszuspringen.
for (int i = 0; i < 10; i++) {
if (i == 4) {
break;
}
System.out.println(i);
}
Scope
Method Scope
Variablen, die direkt innerhalb einer Methode deklariert werden, stehen überall in der Methode nach der Codezeile, in der sie deklariert wurden, zur Verfügung:
Example
public class Main {
public static void main(String[] args) {
// Code here CANNOT use x
int x = 100;
// Code here can use x
System.out.println(x);
Block Scope
Ein Code-Block bezieht sich auf den gesamten Code zwischen geschweiften Klammern {}.
Auf Variablen, die innerhalb von Codeblöcken deklariert werden, kann nur durch den Code zwischen den geschweiften Klammern zugegriffen werden, der auf die Zeile folgt, in der die Variable deklariert wurde:
Example
public class Main {
public static void main(String[] args) {
// Code here CANNOT use x
{ // This is a block
// Code here CANNOT use x
int x = 100;
// Code here CAN use x
System.out.println(x);
} // The block ends here
// Code here CANNOT use x
}
}
Recursion
Rekursion ist die Technik, eine Funktion dazu zu bringen, sich selbst aufzurufen. Mit dieser Technik lassen sich komplizierte Probleme in einfache, leichter zu lösende Probleme aufteilen.
Rekursion kann etwas schwierig zu verstehen sein. Der beste Weg, um herauszufinden, wie sie funktioniert, ist, mit ihr zu experimentieren.
public class Main {
public static void main(String[] args) {
int result = sum(10);
System.out.println(result);
}
public static int sum(int k) {
if (k > 0) {
return k + sum(k - 1);
} else {
return 0;
}
}
Package
Mit Package kann man Bibliotheken zusammenbauen und diese in ein neues Programm einzubinden.
Bsp.:
package <Paketname>;
Import
Mit Import können gewisse Funktionen einem Java Programm hinzugefügt werden.
import javax.swing.*;
import java.awt.*;
Main
Eine Main-Klasse beinhaltet eine Mainfunktion. Diese wird gebraucht, um ein Programm zu starten. Die Mainfunktion ist eine static-Funktion mit einem String-Array als Parameter. Es kann mehrere Main-Funktionen geben.
public class Main {
public static void main(String[] args) {
test test_lernen = new test();
}
}
Class
package org.example;
public class test {
public test() {
///Some Code...
}
}
Extends
Das Schlüsselwort extends erweitert eine Klasse (zeigt an, dass eine Klasse von einer anderen Klasse geerbt wird).
In Java ist es möglich, Attribute und Methoden von einer Klasse an eine andere zu vererben. Wir unterteilen das “Vererbungskonzept” in zwei Kategorien:
- Unterklasse (child) - die Klasse, die von einer anderen Klasse erbt
- Oberklasse (parent) - die Klasse, von der geerbt wird
public class test extends [JFrame] {
public test() {
///Some Code...
}
}
Implements
Um eine Klasse zu deklarieren, die eine Schnittstelle implementiert, fügen Sie eine implements-Klausel in die Klassendeklaration ein.
public class test extends [JFrame] implements [ActionListener] {
public test() {
///Some Code...
}
}
Setablels
this.setTitle()
Setzt den Fenstertitel
this.setTitle("Zero");
this.setSize()
Bestimmt die Grösse des Fensters.
this.setSize(width,height);
this.setResizable()
Bestimmt ob man das Fenster Vergrössern darf.
this.setResizable(bool);
setVisible()
Bestimmt ob das Window sichtbar ist.
setVisible(bool);
setDefaultCloseOperation
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel
JPanel ist ein allgemeiner, leichter Container, in dem weitere Objekte platziert werden können.
JPanel keyPanel = new JPanel();
//Layout Setzen
keyPanel.setLayout(new GridLayout(3, 4, 20, 20));
Definieren von Objekten (JButton, JTextField, JTextArea, JLabel)
//Eine Implementierung eines "Push"-Knopfes.
JButton Button1 = new JButton("Button1");
JButton Button2 = new JButton("Button2");
//Ein Textfeld ist ein einfaches Textsteuerelement, das es dem Benutzer ermöglicht, eine kleine Menge Text einzugeben.
JTextField TextField = new JTextField("Enter Value");
//Ein JTextArea ist ein mehrzeiliger Bereich, der einfachen Text anzeigt.
JTextArea TextArea = new JTextArea();
//Ein Anzeigebereich für eine kurze Textzeichenfolge oder ein Bild oder beides. Ein Etikett reagiert nicht auf Eingabeereignisse. Folglich kann es den Tastaturfokus nicht erhalten.
JLabel Label = new JLabel("Hallo Welt!");
Layout Manager
GridLayout

GridLayout Grid = new GridLayout(rows, cols);
getContentPane().setLayout(Grid);
getContentPane().add(Button1);
getContentPane().add(Button2);
BorderLayout

getContentPane().setLayout(new BorderLayout(20, 20));
getContentPane().add(ButtonON, BorderLayout.NORTH);
FlowLayout

getContentPane().setLayout(new FlowLayout());
getContentPane().add(Label, FlowLayout.LEFT);
Event-Listener
- ActionEvent für Ereignisse, welche GUI-Elemente, wie Knöpfe etc. betreffen (Klicken des Knopfes)
//anonyme Klasse implementiert
Button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ObjectSwing.setText("Text2");
}
});
Button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ObjectSwing.setText("Text1");
}
});
//innere Klasse implementiert
Button1.addActionListener(new ButtonListener())
class ButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
ObjectSwing.setText("Text1");
}
}
//direkt in Klasse implementiert
Button1.addActionListener(this)
@Override
public void actionPerformed(ActionEvent e) {
ObjectSwing.setText("Text1");
}
- MouseEvent für Ereignisse, welche die Maus betreffen (Verschieben, Klick etc.)
class ClickMeListener extends MouseAdapter {
public void mouseEntered(MouseEvent e) {
clickMe.setLabel("Don't click me!");
}
public void mouseExited(MouseEvent e) {
clickMe.setLabel("Click me!");
}
}
JButton clickMe = new JButton("Click me!");
clickMe.addMouseListener(new ClickMeListener());
- WindowEvent für Ereignisse, welche ein Fenster betreffen (Öffnen, Schliessen etc.)
C#
Variablen Datentypen
Ein Datentyp legt die Größe und den Typ der Variablenwerte fest.
Eine Variable wird zuerst mit dem gewünschten Datentyp “Initialisiert” und dann einen Namen gegeben:
int myNum = 5; // Integer (whole number)
double myDoubleNum = 5.99D; // Floating point number
char myLetter = 'D'; // Character
bool myBool = true; // Boolean
string myText = "Hello"; // String
In C# gibt es einige Datentypen eine Kleine Übersicht gibt es hier was die.
| Data Type | Size | Description |
|---|---|---|
| int | 4 bytes | Stores whole numbers from -2,147,483,648 to 2,147,483,647 |
| long | 8 bytes | Stores whole numbers from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 |
| float | 4 bytes | Stores fractional numbers. Sufficient for storing 6 to 7 decimal digits |
| double | 8 bytes | Stores fractional numbers. Sufficient for storing 15 decimal digits |
| bool | 1 bit | Stores true or false values |
| char | 2 bytes | Stores a single character/letter, surrounded by single quotes |
| string | 2 bytes per character | Stores a sequence of characters, surrounded by double quotes |
| object | 4 bytes on a 32-bit platform and 8 bytes on a 64-bit platform | The ultimate base class for all data types in C# |
| dynamic | 4 bytes on a 32-bit platform and 8 bytes on a 64-bit platform | It is used to store any type of data, including data of unknown type |
Type casting
Typ-Casting bedeutet, dass Sie einen Wert eines Datentyps einem anderen Typ zuweisen.
In C# gibt es zwei Arten von Casting:
Implizites Casting (automatisch) - Konvertierung eines kleineren Typs in einen größeren Typ char -> int -> long -> float -> double
Explizites Casting (manuell) - Konvertierung eines größeren Typs in einen Typ kleinerer Größe double -> float -> long -> int -> char
int myInt = 10;
double myDouble = 5.25;
bool myBool = true;
Console.WriteLine(Convert.ToString(myInt));// convert int to string
Console.WriteLine(Convert.ToDouble(myInt));// convert int to double
Console.WriteLine(Convert.ToInt32(myDouble)); // convert double to int
Console.WriteLine(Convert.ToString(myBool)); // convert bool to string
Arithmetic Operators
| Operator | Name | Description | Example |
|---|---|---|---|
| + | Addition | Adds together two values | x + y |
| - | Subtraction | Subtracts one value from another | x - y |
| * | Multiplication | Multiplies two values | x * y |
| / | Division | Divides one value by another | x / y |
| % | Modulus | Returns the division remainder | x % y |
| ++ | Increment | Increases the value of a variable by 1 | x++ |
| -- | Decrement | Decreases the value of a variable by 1 | x-- |
Assignment Operators
| Operator | Example | Same As |
|---|---|---|
| = | x = 5 | x = 5 |
| += | x += 3 | x = x + 3 |
| -= | x -= 3 | x = x - 3 |
| *= | x *= 3 | x = x * 3 |
| /= | x /= 3 | x = x / 3 |
| %= | x %= 3 | x = x % 3 |
| &= | x &= 3 | x = x & 3 |
| |= | x |= 3 | x = x | 3 |
| ^= | x ^= 3 | x = x ^ 3 |
| >>= | x >>= 3 | x = x >> 3 |
| <<= | x <<= 3 | x = x << 3 |
Comparison Operators
| Operator | Name | Example |
|---|---|---|
| == | Equal to | x == y |
| != | Not equal | x != y |
| > | Greater than | x > y |
| < | Less than | x < y |
| >= | Greater than or equal to | x >= y |
| <= | Less than or equal to | x <= y |
Logical Operators
| Operator | Name | Description | Example | Try it |
|---|---|---|---|---|
| && | Logical and | Returns True if both statements are true | x < 5 && x < 10 | Try it » |
| || | Logical or | Returns True if one of the statements is true | x < 5 || x < 4 | Try it » |
| ! | Logical not | Reverse the result, returns False if the result is true | !(x < 5 && x < 10) | Try it » |
Math.Max(x,y)
Die Methode Math.Max(_x_,_y_) kann verwendet werden, um den höchsten Wert von x und y zu finden:
Example
Math.Max(5, 10);
Math.Min(x,y)
Die Methode Math.Min(_x_,_y_) kann verwendet werden, um den kleinsten Wert von x und y zu finden:
Example
Math.Min(5, 10);
Math.Sqrt(x)
Die Methode Math.Sqrt(_x_) gibt die Quadratwurzel von x zurück:
Example
Math.Sqrt(64);
Math.Abs(x)
Die Methode Math.Abs(_x_) gibt den absoluten (positiven) Wert von x zurück:
Example
Math.Abs(-4.7);
Math.Round()
Math.Round() rundet eine Zahl auf die nächste ganze Zahl:
Example
Math.Round(9.99);
IF, Else, Switch, For, For-Each
If-Else Statement:
int x = 10;
if (x > 5) {
Console.WriteLine("x is greater than 5");
} else {
Console.WriteLine("x is less than or equal to 5");
}
Switch Statement:
int month = 3;
switch (month)
{
case 1:
Console.WriteLine("January");
break;
case 2:
Console.WriteLine("February");
break;
case 3:
Console.WriteLine("March");
break;
default:
Console.WriteLine("Not a valid month");
break;
}
For Loop:
for (int i = 0; i < 5; i++){
Console.WriteLine("Iteration: " + i);
}
Foreach Loop:
int[] numbers = { 1, 2, 3, 4, 5 };
foreach (int number in numbers) {
Console.WriteLine("Number: " + number);
}
While Loop:
int i = 0;
while (i < 5)
{
Console.WriteLine("Iteration: " + i);
i++;
}
C# Break and Continue
C# Break
Die break-Anweisung kann auch verwendet werden, um aus einer Schleife herauszuspringen.
int i = 0;
while (i < 10)
{
Console.WriteLine(i);
i++;
if (i == 4)
{
break;
}
}
C# Continue
Die continue-Anweisung bricht eine Iteration (in der Schleife) ab, wenn eine bestimmte Bedingung eintritt, und fährt mit der nächsten Iteration in der Schleife fort.
int i = 0;
while (i < 10)
{
if (i == 4)
{
i++;
continue;
}
Console.WriteLine(i);
i++;
}
Bool
In der Programmierung benötigt man sehr oft einen Datentyp, der nur einen von zwei Werten haben kann, wie z. B.:
JA / NEIN
EIN / AUS
WAHR / FALSCH
Dafür gibt es in C# den Datentyp bool, der die Werte true oder false annehmen kann.
bool isCSharpFun = true;
bool isFishTasty = false;
Console.WriteLine(isCSharpFun); // Outputs True
Console.WriteLine(isFishTasty); // Outputs False
Special Characters
Da Zeichenketten in Anführungszeichen geschrieben werden müssen, wird C# diese Zeichenkette falsch verstehen und einen Fehler erzeugen:
//falsch
string txt = "We are the so-called "Vikings" from the north.";
//richtig
string txt = "We are the so-called \"Vikings\" from the north.";
Die Lösung, um dieses Problem zu vermeiden, ist die Verwendung des Backslash-Escape-Zeichens.
Das Escape-Zeichen “Backslash” (\) verwandelt Sonderzeichen in Zeichenfolgen:
| Escape character | Result | Description |
|---|---|---|
| \' | ' | Single quote |
| \" | " | Double quote |
| \\ | \ | Backslash |
Escape Sequenzen
Andere nützliche Escape-Zeichen in C# sind:
| Code | Result |
|---|---|
| \n | New Line |
| \t | Tab |
| \b | Backspace |
Strings
String Length
Eine Zeichenkette in C# ist eigentlich ein Objekt, das Eigenschaften und Methoden enthält, die bestimmte Operationen mit Zeichenketten durchführen können. Die Länge einer Zeichenkette kann zum Beispiel mit der Eigenschaft Length ermittelt werden:
string txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
Console.WriteLine("The length of the txt string is: " + txt.Length);
Other Methods
string txt = "Hello World";
Console.WriteLine(txt.ToUpper()); // Outputs "HELLO WORLD"
Console.WriteLine(txt.ToLower()); // Outputs "hello world"
Access Strings
Sie können auf die Zeichen in einer Zeichenkette zugreifen, indem Sie sich auf die Indexnummer in eckigen Klammern [] beziehen.
Dieses Beispiel gibt das erste Zeichen in myString aus:
string myString = "Hello";
Console.WriteLine(myString[0]); // Outputs "H"
Dieses Beispiel gibt das zweite Zeichen (1) in myString aus:
string myString = "Hello";
Console.WriteLine(myString[1]); // Outputs "e"
Sie können auch die Indexposition eines bestimmten Zeichens in einer Zeichenkette ermitteln, indem Sie die Methode IndexOf() verwenden:
string myString = "Hello";
Console.WriteLine(myString.IndexOf("e")); // Outputs "1"
Eine weitere nützliche Methode ist Substring(), die die Zeichen aus einer Zeichenkette ab der angegebenen Zeichenposition/dem angegebenen Index extrahiert und eine neue Zeichenkette zurückgibt. Diese Methode wird oft zusammen mit IndexOf() verwendet, um die spezifische Zeichenposition zu ermitteln:
// Full name
string name = "John Doe";
// Location of the letter D
int charPos = name.IndexOf("D");
// Get last name
string lastName = name.Substring(charPos);
// Print the result
Console.WriteLine(lastName);
String Interpolation
Eine weitere Möglichkeit der String-Verkettung ist die String-Interpolation, bei der die Werte von Variablen durch Platzhalter in einem String ersetzt werden. Beachten Sie, dass Sie sich nicht um Leerzeichen kümmern müssen, wie bei der Konkatenation:
string firstName = "John";
string lastName = "Doe";
string name = $"My full name is: {firstName} {lastName}";
Console.WriteLine(name);
String Concatenation
Der Operator + kann zwischen Zeichenketten verwendet werden, um sie zu kombinieren. Dies wird als Verkettung bezeichnet:
string firstName = "John ";
string lastName = "Doe";
string name = firstName + lastName;
Console.WriteLine(name);
Sie können auch die Methode string.Concat() verwenden, um zwei Zeichenketten zu verketten:
string firstName = "John ";
string lastName = "Doe";
string name = string.Concat(firstName, lastName);
Console.WriteLine(name);
Adding Numbers and Strings
Wenn Sie zwei Zahlen addieren, ist das Ergebnis eine Zahl:
int x = 10;
int y = 20;
int z = x + y; // z will be 30 (an integer/number)
Wenn Sie zwei Zeichenfolgen addieren, ist das Ergebnis eine Verkettung von Zeichenfolgen:
string x = "10";
string y = "20";
string z = x + y; // z will be 1020 (a string)
Arrays
Arrays werden verwendet, um mehrere Werte in einer einzigen Variablen zu speichern, anstatt für jeden Wert eine eigene Variable zu deklarieren.
Um ein Array zu deklarieren, definieren Sie den Variablentyp mit eckigen Klammern:
string[] cars;
string[] cars = {"Volvo", "BMW", "Ford", "Mazda"};
int[] myNum = {10, 20, 30, 40};
Access the Elements of an Array
Sie greifen auf ein Array-Element zu, indem Sie sich auf die Indexnummer beziehen.
Diese Anweisung greift auf den Wert des ersten Elements in cars zu:
string[] cars = {"Volvo", "BMW", "Ford", "Mazda"};
Console.WriteLine(cars[0]);
// Outputs Volvo
Change an Array Element
string[] cars = {"Volvo", "BMW", "Ford", "Mazda"};
cars[0] = "Opel";
Console.WriteLine(cars[0]);
// Now outputs Opel instead of Volvo
Array Length
string[] cars = {"Volvo", "BMW", "Ford", "Mazda"};
Console.WriteLine(cars.Length);
// Outputs 4
Loop Through Arrays
string[] cars = {"Volvo", "BMW", "Ford", "Mazda"};
foreach (string i in cars)
{
Console.WriteLine(i);
}
Sort an Array
// Sort a string
string[] cars = {"Volvo", "BMW", "Ford", "Mazda"};
Array.Sort(cars);
foreach (string i in cars)
{
Console.WriteLine(i);
}
// Sort an int
int[] myNumbers = {5, 1, 8, 9};
Array.Sort(myNumbers);
foreach (int i in myNumbers)
{
Console.WriteLine(i);
}
System.Linq Namespace
Weitere nützliche Array-Methoden, wie Min, Max und Sum, finden Sie im System.Linq-Namensraum:
using System;
using System.Linq;
namespace MyApplication
{
class Program
{
static void Main(string[] args)
{
int[] myNumbers = {5, 1, 8, 9};
Console.WriteLine(myNumbers.Max()); // returns the largest value
Console.WriteLine(myNumbers.Min()); // returns the smallest value
Console.WriteLine(myNumbers.Sum()); // returns the sum of elements
}
}
}
Exception handling
try…catch
Bei der Ausführung von C#-Code können verschiedene Fehler auftreten: Codierungsfehler des Programmierers, Fehler aufgrund falscher Eingaben, oder andere unvorhersehbare Dinge.
Wenn ein Fehler auftritt, wird C# normalerweise anhalten und eine Fehlermeldung erzeugen. Der technische Begriff dafür ist: C# wirft eine Exception (wirft einen Fehler).
try
{
// Block of code to try
}
catch (Exception e)
{
// Block of code to handle errors
}
Enum’s
Eine Enum ist eine spezielle “Klasse”, die eine Gruppe von Konstanten (unveränderliche/nur lesbare Variablen) darstellt. Mann kann sich Enums wie Constrains in SQL vorstellen.
enum Months
{
January,// 0
February, // 1
March, // 2
April, // 3
May,// 4
June, // 5
July// 6
}
static void Main(string[] args)
{
int myNum = (int) Months.April;
Console.WriteLine(myNum);
}
OPP
Bei der prozeduralen Programmierung geht es darum, Prozeduren oder Methoden zu schreiben, die Operationen an den Daten durchführen, während es bei der objektorientierten Programmierung darum geht, Objekte zu erstellen, die sowohl Daten als auch Methoden enthalten.
Die objektorientierte Programmierung hat mehrere Vorteile gegenüber der prozeduralen Programmierung:
OOP ist schneller und einfacher in der Ausführung OOP bietet eine klare Struktur für die Programme OOP hilft, den C#-Code DRY “Don’t Repeat Yourself” zu halten, und macht den Code einfacher zu pflegen, zu ändern und zu debuggen OOP ermöglicht es, vollständige wiederverwendbare Anwendungen mit weniger Code und kürzerer Entwicklungszeit zu erstellen
Was sind Klassen und Objekte
| Klassen | Objekte |
|---|---|
| Frucht | Apple |
| Banana | |
| Mango | |
| ——- | ——- |
| Auto | Volvo |
| Audi | |
| Toyota |
Klasse
Um eine Klasse zu erstellen, verwenden Sie das Schlüsselwort class:
class Car
{
string color = "red";
}
Objekt
Ein Objekt wird aus einer Klasse erstellt. Wir haben bereits die Klasse Car erstellt und können diese nun zum Erstellen von Objekten verwenden.
Um ein Objekt von Car zu erstellen, geben Sie den Klassennamen an, gefolgt vom Objektnamen, und verwenden Sie das Schlüsselwort new:
class Car
{
string color = "red";
static void Main(string[] args)
{
Car myObj = new Car();
Console.WriteLine(myObj.color);
}
}
Konstruktor
Ein Konstruktor ist eine spezielle Methode, die zur Initialisierung von Objekten verwendet wird. Der Vorteil eines Konstruktors ist, dass er aufgerufen wird, wenn ein Objekt einer Klasse erstellt wird. Er kann verwendet werden, um Anfangswerte für Felder festzulegen:
// Create a Car class
class Car
{
public string model; // Create a field
// Create a class constructor for the Car class
public Car()
{
model = "Mustang"; // Set the initial value for model
}
static void Main(string[] args)
{
Car Ford = new Car(); // Create an object of the Car Class (this will call the constructor)
Console.WriteLine(Ford.model); // Print the value of model
}
}
// Outputs "Mustang"
Public/Private
Warum Zugriffsmodifikatoren wie Private/Public?
Kontrolle der Sichtbarkeit von Klassenmitgliedern (die Sicherheitsstufe jeder einzelnen Klasse und jedes Klassenmitglieds).
Um eine “Verkapselung” zu erreichen, d.h. um sicherzustellen, dass “sensible” Daten vor den Benutzern verborgen werden. Dies geschieht, indem Felder als privat deklariert werden.
Default
Standardmäßig sind alle Mitglieder einer Klasse privat, wenn Sie keinen Zugriffsmodifikator angeben.
Die Verschiedenen Modifikatoren
Es gibt vier unterschiedliche Zugriffsmodifikatoren in C#. Hier ist ein überblick inklusive deren Bedeutung/Auswirkung in C#:
| Modifikator | Beschreibung |
|---|---|
| public | Der Code ist für alle Klassen zugänglich |
| private | Der Code ist nur innerhalb der gleichen Klasse zugänglich |
| protected | Der Code ist innerhalb der gleichen Klasse oder in einer von dieser Klasse abgeleiteten Klasse zugänglich. Sie werden später mehr über Vererbung erfahren |
| internal | Der Code ist nur innerhalb seiner eigenen Assembly zugänglich, aber nicht aus einer anderen Assembly. Sie werden später mehr darüber erfahren |
Properties und Encapsulation
Der Sinn der Kapselung besteht darin, sicherzustellen, dass “sensible” Daten vor den Benutzern verborgen werden. Um dies zu erreichen, müssen Sie:
Felder/Variablen als privat deklarieren öffentliche Get- und Set-Methoden über Eigenschaften bereitstellen, um auf den Wert eines privaten Feldes zuzugreifen und ihn zu aktualisieren
class Person
{
private string name;
private int age;
public string Name
{
get { return name; }
set { name = value; }
}
public int Age
{
get { return age; }
set { age = value; }
}
}
class Program
{
static void Main(string[] args)
{
Person person = new Person();
person.Name = "Jane Doe";
person.Age = 32;
Console.WriteLine("Person: Name = " + person.Name + ", Age = " + person.Age); // Output: Person: Name = Jane Doe, Age = 32
}
}
Abstraction
Unter Datenabstraktion versteht man den Prozess, bestimmte Details zu verbergen und dem Benutzer nur die wesentlichen Informationen zu zeigen. Abstraktion kann entweder durch abstrakte Klassen oder durch Schnittstellen erreicht werden.
Das Schlüsselwort abstract wird für Klassen und Methoden verwendet:
Abstrakte Klasse: ist eine eingeschränkte Klasse, die nicht zur Erstellung von Objekten verwendet werden kann (um auf sie zuzugreifen, muss sie von einer anderen Klasse geerbt werden).
Abstrakte Methode: kann nur in einer abstrakten Klasse verwendet werden und hat keinen Körper. Der Rumpf wird von der abgeleiteten Klasse bereitgestellt (geerbt von).
Eine abstrakte Klasse kann sowohl abstrakte als auch reguläre Methoden haben:
abstract class Animal
{
public abstract void animalSound();
public void sleep()
{
Console.WriteLine("Zzz");
}
}
Um auf die abstrakte Klasse zugreifen zu können, muss sie von einer anderen Klasse geerbt werden. Konvertieren wir die Klasse Animal, die wir im Kapitel Polymorphismus verwendet haben, in eine abstrakte Klasse.
// Abstract class
abstract class Animal
{
// Abstract method (does not have a body)
public abstract void animalSound();
// Regular method
public void sleep()
{
Console.WriteLine("Zzz");
}
}
// Derived class (inherit from Animal)
class Pig : Animal
{
public override void animalSound()
{
// The body of animalSound() is provided here
Console.WriteLine("The pig says: wee wee");
}
}
class Program
{
static void Main(string[] args)
{
Pig myPig = new Pig(); // Create a Pig object
myPig.animalSound(); // Call the abstract method
myPig.sleep(); // Call the regular method
}
}
Interface
Eine Schnittstelle ist eine völlig “abstrakte Klasse”, die nur abstrakte Methoden und Eigenschaften (mit leeren Körpern) enthalten kann.
Standardmäßig sind, Mitglieder eines Interface abstract und public.
Um auf die Methoden der Interface zugreifen zu können, muss das Interface von einer anderen Klasse “implementiert” (quasi geerbt) werden. Um eine Schnittstelle zu implementieren, verwenden Sie das Symbol : (genau wie bei der Vererbung). Der Methodenkörper der Schnittstelle wird von der Klasse “implement” bereitgestellt. Beachten Sie, dass Sie bei der Implementierung einer Schnittstelle nicht das Schlüsselwort override verwenden müssen:
// Interface
interface IAnimal
{
void animalSound(); // interface method (does not have a body)
}
// Pig "implements" the IAnimal interface
class Pig : IAnimal
{
public void animalSound()
{
// The body of animalSound() is provided here
Console.WriteLine("The pig says: wee wee");
}
}
class Program
{
static void Main(string[] args)
{
Pig myPig = new Pig(); // Create a Pig object
myPig.animalSound();
}
}
Inheritance
In C# ist es möglich, Felder und Methoden von einer Klasse an eine andere zu vererben. Wir unterteilen das “Vererbungskonzept” in zwei Kategorien:
Abgeleitete Klasse (child) - die Klasse, die von einer anderen Klasse erbt Basisklasse (parent) - die Klasse, von der geerbt wird
Um von einer Klasse zu erben, verwenden Sie das Symbol : .
class Vehicle // base class (parent)
{
public string brand = "Ford"; // Vehicle field
public void honk() // Vehicle method
{
Console.WriteLine("Tuut, tuut!");
}
}
class Car : Vehicle // derived class (child)
{
public string modelName = "Mustang"; // Car field
}
class Program
{
static void Main(string[] args)
{
// Create a myCar object
Car myCar = new Car();
// Call the honk() method (From the Vehicle class) on the myCar object
myCar.honk();
// Display the value of the brand field (from the Vehicle class) and the value of the modelName from the Car class
Console.WriteLine(myCar.brand + " " + myCar.modelName);
}
}
Polymorphism
Polymorphismus bedeutet “viele Formen”, und er tritt auf, wenn wir viele Klassen haben, die durch Vererbung miteinander verbunden sind.
Stellen Sie sich zum Beispiel eine Basisklasse namens Animal vor, die eine Methode namens animalSound() hat. Abgeleitete Klassen von Animals könnten Schweine, Katzen, Hunde, Vögel sein - und sie haben auch ihre eigene Implementierung eines Tiergeräusches (das Schwein grunzt, die Katze miaut usw.):
class Animal // Base class (parent)
{
public virtual void animalSound()
{
Console.WriteLine("The animal makes a sound");
}
}
class Pig : Animal // Derived class (child)
{
public override void animalSound()
{
Console.WriteLine("The pig says: wee wee");
}
}
class Dog : Animal // Derived class (child)
{
public override void animalSound()
{
Console.WriteLine("The dog says: bow wow");
}
}
class Program
{
static void Main(string[] args)
{
Animal myAnimal = new Animal(); // Create a Animal object
Animal myPig = new Pig(); // Create a Pig object
Animal myDog = new Dog(); // Create a Dog object
myAnimal.animalSound();
myPig.animalSound();
myDog.animalSound();
}
}
Variable Convert.* methods
In C# können Sie Datentypen mithilfe von Typkonvertierungsfunktionen konvertieren, z. B. Convert.ToInt32, Int32.Parse oder int.TryParse.
| Method | Description |
|---|---|
| ToBoolean | Converts a value to a Boolean data type. |
| ToByte | Converts a value to a byte data type. |
| ToChar | Converts a value to a character data type. |
| ToDateTime | Converts a value to a date and time data type. |
| ToDecimal | Converts a value to a decimal data type. |
| ToDouble | Converts a value to a double-precision floating-point number data type. |
| ToInt16 | Converts a value to a 16-bit signed integer data type. |
| ToInt32 | Converts a value to a 32-bit signed integer data type. |
| ToInt64 | Converts a value to a 64-bit signed integer data type. |
| ToSByte | Converts a value to a signed byte data type. |
| ToSingle | Converts a value to a single-precision floating-point number data type. |
| ToString | Converts a value to a string data type. |
| ToType | Converts a value to a specified data type. |
| ToUInt16 | Converts a value to a 16-bit unsigned integer data type. |
| ToUInt32 | Converts a value to a 32-bit unsigned integer data type. |
| ToUInt64 | Converts a value to a 64-bit unsigned integer data type. |
Hier sind einige Beispiele:
string booleanAsString = "true";
bool booleanValue = Convert.ToBoolean(booleanAsString);
string byteAsString = "255";
byte byteValue = Convert.ToByte(byteAsString);
string charAsString = "A";
char charValue = Convert.ToChar(charAsString);
string dateAsString = "01/01/2000";
DateTime dateValue = Convert.ToDateTime(dateAsString);
string decimalAsString = "42.0";
decimal decimalValue = Convert.ToDecimal(decimalAsString);
string doubleAsString = "3.14";
double doubleValue = Convert.ToDouble(doubleAsString);
string intAsString = "42";
int intValue = Convert.ToInt32(intAsString);
string stringValue = Convert.ToString(42);
WPF
Setables
ResizeMode="NoResize"
Title="MainWindow" Height="300" Width="300"
Background="Aquamarine"
Loaded="Window_Loaded"
Components
TextBlock
Diese Komponente zeigt Text an.
<TextBlock Text="Hello, world!" />
Label
Es kann verwendet werden, um einen beschreibenden Text für andere Steuerelemente bereitzustellen oder um Text als Teil einer Benutzeroberfläche anzuzeigen.
<Label Content="Name: " />
Image
Diese Komponente zeigt ein Bild an.
<Image Source="image.png" />
Checkbox
Eine “Checkbox” in WPF ist ein Steuerelement, das es dem Benutzer ermöglicht, eine binäre Option auszuwählen, entweder “angekreuzt” oder “nicht angekreuzt”.
<CheckBox Content="Subscribe to newsletter" Click="ButtonBase_OnClick" />
Um Zu checken welche ComboBox gedrückt wurde kann man diesen Code verwenden:
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
CheckBox subscribeCheckBox = (CheckBox)sender;
if (subscribeCheckBox.IsChecked.Value)
{
MessageBox.Show("You have subscribed to the newsletter", "Subscription Status");
}
else
{
MessageBox.Show("You have unsubscribed from the newsletter", "Subscription Status");
}
}
ComboBox
Eine ComboBox in WPF ist ein Steuerelement, mit dem der Benutzer ein Element aus einer Dropdown-Liste von Optionen auswählen kann.
<ComboBox x:Name="ExampleComboBox" Width="100" SelectedIndex="0" SelectionChanged="ExampleComboBox_SelectionChanged">
<ComboBoxItem>Option 1</ComboBoxItem>
<ComboBoxItem>Option 2</ComboBoxItem>
<ComboBoxItem>Option 3</ComboBoxItem>
</ComboBox>
Um Zu checken welche ComboBox gedrückt wurde kann man diesen Code verwenden:
ComboBoxItem selectedItem = ExampleComboBox.SelectedItem as ComboBoxItem;
MessageBox.Show("Selected option: " + selectedItem.Content, "Selection Changed");
Radio Button
Ein RadioButton in WPF ist ein Steuerelement, das es dem Benutzer ermöglicht, eine einzelne Option aus einer Gruppe von sich gegenseitig ausschließenden Optionen auszuwählen.
<Label Content="Gender: " />
<StackPanel Margin="30">
<RadioButton x:Name="Male" Content="Male" GroupName="Gender" IsChecked="True" />
<RadioButton x:Name="Female" Content="Female" GroupName="Gender" />
<RadioButton x:Name="NonBinary" Content="Non-Binary" GroupName="Gender" />
</StackPanel>
<Button Content="Submit" HorizontalAlignment="Left" Height="30" Margin="30,30,0,0" Width="75" Click="Button_Click"/>
Um Zu checken welcher Button gedrückt wurde kann man diesen Code verwenden:
private void Button_Click(object sender, RoutedEventArgs e) {
string selectedGender = "";
if (Male.IsChecked == true)
{
selectedGender = "Male";
}
else if (Female.IsChecked == true)
{
selectedGender = "Female";
}
else if (NonBinary.IsChecked == true)
{
selectedGender = "Non-Binary";
}
MessageBox.Show("Selected Gender: " + selectedGender);
}
ListBox
Eine Schaltfläche in WPF ist ein Steuerelement, mit dem der Benutzer durch Anklicken eine Aktion auslösen kann, z. B. das Absenden eines Formulars oder das Auslösen eines Befehls.
<ListBox x:Name="ExampleListBox" SelectionMode="Multiple" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,10,0,0" Width="100">
<ListBoxItem>Item 1</ListBoxItem>
<ListBoxItem>Item 2</ListBoxItem>
<ListBoxItem>Item 3</ListBoxItem>
</ListBox>
<TextBlock x:Name="SelectedItemsTextBlock" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="120,10,0,0" Text="Selected Items:" />
<ListBox x:Name="SelectedItemsListBox" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="120,30,0,0" Width="150" ItemsSource="{Binding ElementName=ExampleListBox, Path=SelectedItems}"/>
<Button x:Name="ShowSelectedItemsButton" Content="Show Selected Items" HorizontalAlignment="Left" VerticalAlignment="Top"Margin="10,100,0,0" Width="150" Click="ShowSelectedItemsButton_Click"/>
Um die Selektierten Objekte anzuzeigen kann man diese Methode implementieren:
private void ShowSelectedItemsButton_Click(object sender, RoutedEventArgs e) {
string selectedItems = "";
foreach (var item in ExampleListBox.SelectedItems)
{
selectedItems += ((System.Windows.Controls.ListBoxItem)item).Content.ToString() + "\n";
}
MessageBox.Show(selectedItems, "Selected Items");
}
TreeView
Der TreeView in WPF ist eine hierarchische Ansicht, die es ermöglicht, Daten in einer Baumstruktur anzuzeigen.
<TreeView x:Name="ExampleTreeView">
<TreeViewItem Header="Parent Node 1">
<TreeViewItem Header="Child Node 1.1" />
<TreeViewItem Header="Child Node 1.2" />
</TreeViewItem>
<TreeViewItem Header="Parent Node 2">
<TreeViewItem Header="Child Node 2.1" />
<TreeViewItem Header="Child Node 2.2" />
</TreeViewItem>
</TreeView>
ScrollViewer
Diese Komponente bietet Bildlauffunktionen für ihren Inhalt.
<ScrollViewer>
<StackPanel>
<!-- Content goes here -->
</StackPanel>
</ScrollViewer>
Button
Eine Schaltfläche in WPF ist ein Steuerelement, mit dem der Benutzer durch Anklicken eine Aktion auslösen kann, z. B. das Absenden eines Formulars oder das Auslösen eines Befehls.
<Button x:Name="ExampleButton" Content="Click Me" Height="30" Width="100" Click="ExampleButton_Click"/>
Layout Managers
StackPanel
Dieser Layout-Manager stapelt seine Kinder entweder horizontal oder vertikal, je nach seiner Eigenschaft “Ausrichtung”.
<StackPanel Orientation="Vertical">
<Button Content="Button 1" />
<Button Content="Button 2" />
<Button Content="Button 3" />
</StackPanel>
WrapPanel
Dieser Layout-Manager ordnet seine Kinder in einem Fließlayout an und springt in die nächste Zeile, wenn in der aktuellen Zeile kein Platz mehr ist.
<WrapPanel>
<Button Content="Button 1" Width="100" Height="100"/>
<Button Content="Button 2" Width="100" Height="100"/>
<Button Content="Button 3" Width="100" Height="100"/>
</WrapPanel>
Grid
Dieser Layout-Manager unterteilt den verfügbaren Platz in Zeilen und Spalten und ermöglicht die Positionierung seiner Kinder anhand von Zeilen- und Spaltenindizes.
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Button Grid.Row="0" Grid.Column="0" Content="Button 1"/>
<Button Grid.Row="1" Grid.Column="1" Content="Button 2"/>
</Grid>
DockPanel
Dieser Layout-Manager positioniert seine Kinder an den Rändern (oben, unten, links, rechts) oder füllt den verbleibenden Platz (LastChildFill).
<DockPanel LastChildFill="True">
<Button DockPanel.Dock="Top" Content="Button 1"/>
<Button DockPanel.Dock="Left" Content="Button 2"/>
<Button Content="Button 3"/>
</DockPanel>
Open new Windows & Close old
Pizza pizza = new Pizza();
this.Close();
pizza.Show();