using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace CarManagerV3.Forms { public partial class SettingsForm : Form { // Settings map (Maps settings to controls and default values + optional change event handler function that takes previous and new value) private Dictionary onChange)> settingsMap = new Dictionary onChange)>(); public SettingsForm() { InitializeComponent(); initializeSettingsMap(); } private void initializeSettingsMap() { // Initialize the settings map with setting keys, associated controls, default values, and optional change event handlers settingsMap["DataLocation"] = (tbxDataLocation, Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\CarManagerV3", (string before, string after) => { // TODO } ); } private void SettingsForm_Load(object sender, EventArgs e) { loadSettings(); } private void loadSettings() { // with settings map foreach (var setting in settingsMap) { string key = setting.Key; Control control = setting.Value.control; string value = Properties.Settings.Default[key]?.ToString() ?? string.Empty; control.Text = value; } } private void saveSettings() { // Save settings using the settings map foreach (var setting in settingsMap) { string key = setting.Key; Control control = setting.Value.control; string value = control.Text; string oldValue = Properties.Settings.Default[key]?.ToString() ?? string.Empty; // Save the value to application settings Properties.Settings.Default[key] = value; // Invoke the change event handler if it exists and the value has changed if (setting.Value.onChange != null && oldValue != value) { setting.Value.onChange(oldValue, value); } } Properties.Settings.Default.Save(); } private void resetSettings() { DialogResult confirmReset = MessageBox.Show("Are you sure you want to reset all settings to their default values? This action cannot be undone.", "Confirm Reset", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if(confirmReset != DialogResult.Yes) { return; } // Reset settings to default values using the settings map foreach (var setting in settingsMap) { string key = setting.Key; string defaultValue = setting.Value.defaultValue; // Reset the value to default in application settings Properties.Settings.Default[key] = defaultValue; } Properties.Settings.Default.Save(); loadSettings(); } private void btnAccept_Click(object sender, EventArgs e) { saveSettings(); this.Close(); } private void btnDiscard_Click(object sender, EventArgs e) { this.Close(); } private void btnReset_Click(object sender, EventArgs e) { resetSettings(); } } }