186 lines
4.0 KiB
Markdown
186 lines
4.0 KiB
Markdown
## MainWindow.xaml.cs – Erklärung Zeile für Zeile
|
||
|
||
using-Anweisungen:
|
||
Diese laden verschiedene Bibliotheken, die für die Funktionen des Programms benötigt werden – z. B. für GUI (WPF), Netzwerk, JSON-Verarbeitung, Textverarbeitung, usw.
|
||
```csharp
|
||
|
||
System.Text – Für z. B. StringBuilder oder Kodierungen.
|
||
|
||
System.Windows.* – Alles was WPF betrifft: Fenster, Controls, Styles etc.
|
||
|
||
System.Net.Http – Für HTTP-Anfragen, hier verwendet für Wetter-API.
|
||
|
||
System.Text.Json – Zum Lesen/Verarbeiten von JSON-Daten.
|
||
|
||
System.Threading.Tasks – Für async/await, also asynchrone Methoden.
|
||
|
||
System.IO – Für Dateioperationen wie Speichern des Chatverlaufs.
|
||
```
|
||
|
||
```csharp
|
||
namespace Chatbot_WPF_Projekt
|
||
{
|
||
public partial class MainWindow : Window
|
||
```
|
||
|
||
- namespace: Projektname.
|
||
|
||
- MainWindow: Hauptfenster des Programms.
|
||
|
||
- : Window: Erbt von WPF-Fensterklasse.
|
||
|
||
```csharp
|
||
private string currentLocation = "";
|
||
public MainWindow()
|
||
{
|
||
InitializeComponent();
|
||
}
|
||
```
|
||
- currentLocation: Speicherort für die aktuelle Stadt.
|
||
|
||
- InitializeComponent(): Verbindet XAML und C#-Code.
|
||
|
||
```csharp
|
||
private async void SendButton_Click(object sender, RoutedEventArgs e)
|
||
|
||
```
|
||
- private → Die Methode gehört nur zu dieser Klasse, andere Klassen sehen sie nicht.
|
||
|
||
- async → Die Methode kann auf Dinge warten, wie z. B. eine Antwort vom Wetterdienst.
|
||
|
||
- void → Die Methode gibt nichts zurück.
|
||
|
||
- SendButton_Click → So heißt die Methode, typisch für Button-Klicks.
|
||
|
||
- (object sender, RoutedEventArgs e) → Das sind Infos über das Klick-Ereignis. Wird von WPF automatisch mitgegeben.
|
||
|
||
```csharp
|
||
string userInput = InputTextBox.Text.Trim();
|
||
|
||
```
|
||
- Holt Nutzereingabe, entfernt Leerzeichen.
|
||
|
||
```csharp
|
||
if (string.IsNullOrEmpty(userInput)) ...
|
||
|
||
```
|
||
- Wenn Eingabe leer → Hinweis.
|
||
|
||
```csharp
|
||
ChatOutput.Text += $"Du: {userInput}\n";
|
||
|
||
```
|
||
- Gibt Nutzereingabe im Chatverlauf aus.
|
||
|
||
```csharp
|
||
string botResponse = "";
|
||
|
||
```
|
||
- Legt Bot-Antwortvariable an.
|
||
|
||
```csharp
|
||
botResponse = "Liste aller Befehle: !hilfe, !joke, !standort <stadt>, !zeit, !wetter";
|
||
|
||
```
|
||
- Listet alle befehle auf bei schreiben des !hilfe commands
|
||
|
||
```csharp
|
||
string[] witze = new string[10]; ...
|
||
Random zufall = new Random(); ...
|
||
|
||
```
|
||
- Zufälliger Witz aus Liste.
|
||
|
||
```csharp
|
||
string[] parts = userInput.Split(' ', 2);
|
||
currentLocation = parts[1];
|
||
|
||
```
|
||
- Stadt speichern.
|
||
|
||
```csharp
|
||
botResponse = $"Aktuelle Uhrzeit in {currentLocation}: {DateTime.Now.ToShortTimeString()}";
|
||
|
||
```
|
||
- Gibt lokale Uhrzeit aus
|
||
|
||
```csharp
|
||
botResponse = await GetWeatherAsync(currentLocation);
|
||
|
||
```
|
||
- Ruft Wetterdaten über API ab.
|
||
|
||
```csharp
|
||
botResponse = "Befehl nicht erkannt.";
|
||
|
||
```
|
||
- befehl falsch oder garnicht geschrieben
|
||
|
||
```csharp
|
||
private void InputTextBox_KeyDown(object sender, KeyEventArgs e)
|
||
{
|
||
if (e.Key == Key.Enter)
|
||
SendButton_Click(sender, e);
|
||
}
|
||
|
||
```
|
||
- Drücken von Enter löst SendButton aus.
|
||
|
||
```csharp
|
||
private void ClearButton_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
ChatOutput.Text = string.Empty;
|
||
}
|
||
|
||
```
|
||
- löscht den verlauf wenn man auf den clearbutton drückt
|
||
|
||
```csharp
|
||
private void Color_theme_Checked ...
|
||
private void Color_theme_Unchecked ...
|
||
|
||
```
|
||
- Checked: Dunkler Hintergrund, helle Schrift.
|
||
|
||
- Unchecked: Heller Hintergrund, dunkle Schrift.
|
||
|
||
```csharp
|
||
private void SaveButton_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
string fileName = $"Chat_{DateTime.Now:yyyy-MM-dd_HHmm}.txt";
|
||
...
|
||
}
|
||
|
||
```
|
||
- Speichert Chat als .txt mit Datum/Uhrzeit im Namen.
|
||
|
||
```csharp
|
||
private async Task<string> GetWeatherAsync(string city)
|
||
|
||
string url = $"https://api.openweathermap.org/data/2.5/weather?...";
|
||
|
||
```
|
||
- URL zusammenbauen:
|
||
- HTTP-Anfrage senden mit HttpClient
|
||
|
||
```csharp
|
||
double temp = root.GetProperty("main").GetProperty("temp").GetDouble();
|
||
string description = root.GetProperty("weather")[0].GetProperty("description").GetString();
|
||
|
||
```
|
||
- JSON-Daten parsen:
|
||
|
||
```csharp
|
||
return $"Aktuelles Wetter in {city}: {temp}°C, {description}";
|
||
|
||
```
|
||
- atntwort erzeugen
|
||
|
||
```csharp
|
||
catch (Exception ex)
|
||
{
|
||
return "Fehler beim Abrufen der Wetterdaten.";
|
||
}
|
||
|
||
```
|
||
- fehler behandlung |