4.0 KiB
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.
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.
namespace Chatbot_WPF_Projekt
{
public partial class MainWindow : Window
-
namespace: Projektname.
-
MainWindow: Hauptfenster des Programms.
-
: Window: Erbt von WPF-Fensterklasse.
private string currentLocation = "";
public MainWindow()
{
InitializeComponent();
}
-
currentLocation: Speicherort für die aktuelle Stadt.
-
InitializeComponent(): Verbindet XAML und C#-Code.
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.
string userInput = InputTextBox.Text.Trim();
- Holt Nutzereingabe, entfernt Leerzeichen.
if (string.IsNullOrEmpty(userInput)) ...
- Wenn Eingabe leer → Hinweis.
ChatOutput.Text += $"Du: {userInput}\n";
- Gibt Nutzereingabe im Chatverlauf aus.
string botResponse = "";
- Legt Bot-Antwortvariable an.
botResponse = "Liste aller Befehle: !hilfe, !joke, !standort <stadt>, !zeit, !wetter";
- Listet alle befehle auf bei schreiben des !hilfe commands
string[] witze = new string[10]; ...
Random zufall = new Random(); ...
- Zufälliger Witz aus Liste.
string[] parts = userInput.Split(' ', 2);
currentLocation = parts[1];
- Stadt speichern.
botResponse = $"Aktuelle Uhrzeit in {currentLocation}: {DateTime.Now.ToShortTimeString()}";
- Gibt lokale Uhrzeit aus
botResponse = await GetWeatherAsync(currentLocation);
- Ruft Wetterdaten über API ab.
botResponse = "Befehl nicht erkannt.";
- befehl falsch oder garnicht geschrieben
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.
private void ClearButton_Click(object sender, RoutedEventArgs e)
{
ChatOutput.Text = string.Empty;
}
- löscht den verlauf wenn man auf den clearbutton drückt
private void Color_theme_Checked ...
private void Color_theme_Unchecked ...
-
Checked: Dunkler Hintergrund, helle Schrift.
-
Unchecked: Heller Hintergrund, dunkle Schrift.
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.
private async Task<string> GetWeatherAsync(string city)
string url = $"https://api.openweathermap.org/data/2.5/weather?...";
- URL zusammenbauen:
- HTTP-Anfrage senden mit HttpClient
double temp = root.GetProperty("main").GetProperty("temp").GetDouble();
string description = root.GetProperty("weather")[0].GetProperty("description").GetString();
- JSON-Daten parsen:
return $"Aktuelles Wetter in {city}: {temp}°C, {description}";
- atntwort erzeugen
catch (Exception ex)
{
return "Fehler beim Abrufen der Wetterdaten.";
}
- fehler behandlung