- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [Phần mềm] Tải và cài đặt phần mềm Sublime Text 4180 full version
- [C#] Hướng dẫn download file từ Minio Server Winform
- [C#] Hướng dẫn đăng nhập zalo login sử dụng API v4 trên winform
- [SOFTWARE] Phần mềm gởi tin nhắn Zalo Marketing Pro giá rẻ mềm nhất thị trường
- [C#] Việt hóa Text Button trên MessageBox Dialog Winform
- [DEVEXPRESS] Chia sẻ code các tạo report in nhiều hóa đơn trên XtraReport C#
- [POWER AUTOMATE] Hướng dẫn gởi tin nhắn zalo từ file Excel - No code
- [C#] Chia sẻ code lock và unlock user trong domain Window
- [DEVEXPRESS] Vẽ Biểu Đồ Stock Chứng Khoán - Công Cụ Thiết Yếu Cho Nhà Đầu Tư trên Winform
- [C#] Hướng dẫn bảo mật ứng dụng 2FA (Multi-factor Authentication) trên Winform
- [C#] Hướng dẫn convert HTML code sang PDF File trên NetCore 7 Winform
- [C#] Hướng dẫn viết ứng dụng chat với Gemini AI Google Winform
[C#] Lưu trạng thái các control trên Winform vào Registry Windows
Xin chào các bạn, bài viết hôm nay mình sẽ tiếp tục hướng dẫn các bạn cách lưu các trạng thải thuộc tính của các Control Winform vào Windows Registry C#.
[C#] Save Setting to Registry
Khi các bạn mở ứng dụng lên, muốn lưu lại các thuộc tính như trạng thái, kích thước, text, value của các control vào Registry.
Giống như các bạn chơi game, thì thường có chức năng save trạng thái lại.
Bình thường mình có rất nhiều các để lưu vào cơ sở dữ liệu database, text file...
Trong bài này mình sẽ hướng dẫn các bạn lưu và đọc các thông số trạng thái này vào Windows Registry.
Ở hình ảnh trên là các thuộc tính mình lưu vào Registry.
Giao diện demo ứng dụng C#:
Khi mình nhập và các các thông tin xong thì ở sự kiện Form_Closing chúng ta sẽ lưu chúng lại vào registry.
Và khi mở form load thì chúng ta sẽ đọc các thuộc tính đó lại vào các control của mình.
Đầu tiên, các bạn tạo cho mình một class RegistryHelper.cs
với nội dung như sau:
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SaveSettingRegistry
{
class RegistryHelper
{
// Remove all settings for this app.
public static void ClearSettings(string app_name)
{
RegistryKey reg_key =
Registry.CurrentUser.OpenSubKey("Software", true);
reg_key.DeleteSubKeyTree(app_name);
}
// Save a value.
public static void SaveSetting(string app_name,
string name, object value)
{
RegistryKey reg_key =
Registry.CurrentUser.OpenSubKey("Software", true);
RegistryKey sub_key = reg_key.CreateSubKey(app_name);
sub_key.SetValue(name, value);
}
// Get a value.
public static object GetSetting(string app_name, string name, object default_value)
{
RegistryKey reg_key = Registry.CurrentUser.OpenSubKey("Software", true);
RegistryKey sub_key = reg_key.CreateSubKey(app_name);
return sub_key.GetValue(name, default_value);
}
// Load all of the saved settings.
public static void LoadAllSettings(string app_name, Form frm)
{
// Load form settings.
frm.SetBounds(
(int)GetSetting(app_name, "FormLeft", frm.Left),
(int)GetSetting(app_name, "FormTop", frm.Top),
(int)GetSetting(app_name, "FormWidth", frm.Width),
(int)GetSetting(app_name, "FormHeight", frm.Height));
frm.WindowState = (FormWindowState)GetSetting(app_name,
"FormWindowState", frm.WindowState);
// Load the controls' values.
LoadChildSettings(app_name, frm);
}
// Load all child control settings.
public static void LoadChildSettings(string app_name, Control parent)
{
foreach (Control child in parent.Controls)
{
// Restore the child's value.
switch (child.GetType().Name)
{
case "TextBox":
case "ListBox":
case "ComboBox":
child.Text = GetSetting(app_name, child.Name, child.Text).ToString();
break;
case "CheckBox":
CheckBox chk = child as CheckBox;
chk.Checked = bool.Parse(GetSetting(app_name,
child.Name, chk.Checked.ToString()).ToString());
break;
case "RadioButton":
RadioButton rad = child as RadioButton;
rad.Checked = bool.Parse(GetSetting(app_name,
child.Name, rad.Checked.ToString()).ToString());
break;
case "VScrollBar":
VScrollBar vscr = child as VScrollBar;
vscr.Value = (int)GetSetting(app_name, child.Name, vscr.Value);
break;
case "HScrollBar":
HScrollBar hscr = child as HScrollBar;
hscr.Value = (int)GetSetting(app_name, child.Name, hscr.Value);
break;
case "NumericUpDown":
NumericUpDown nud = child as NumericUpDown;
nud.Value = decimal.Parse(GetSetting(app_name, child.Name, nud.Value).ToString());
break;
case "CheckedListBox":
CheckedListBox lst = child as CheckedListBox;
for (int i = 0; i < lst.Items.Count; i++)
{
// Default is false.
string item_name = child.Name + "(" + i.ToString() + ")";
bool is_checked = bool.Parse(GetSetting(app_name, item_name, "False").ToString());
lst.SetItemChecked(i, is_checked);
}
break;
// Add other control types here.
}
// Recursively restore the child's children.
LoadChildSettings(app_name, child);
}
}
// Save all of the form's settings.
public static void SaveAllSettings(string app_name, Form frm)
{
ClearSettings(app_name);
// Save form settings.
SaveSetting(app_name, "FormWindowState", (int)frm.WindowState);
if (frm.WindowState == FormWindowState.Normal)
{
// Save current bounds.
SaveSetting(app_name, "FormLeft", frm.Left);
SaveSetting(app_name, "FormTop", frm.Top);
SaveSetting(app_name, "FormWidth", frm.Width);
SaveSetting(app_name, "FormHeight", frm.Height);
}
else
{
// Save bounds when we're restored.
SaveSetting(app_name, "FormLeft", frm.RestoreBounds.Left);
SaveSetting(app_name, "FormTop", frm.RestoreBounds.Top);
SaveSetting(app_name, "FormWidth",
frm.RestoreBounds.Width);
SaveSetting(app_name, "FormHeight",
frm.RestoreBounds.Height);
}
// Save the controls' values.
SaveChildSettings(app_name, frm);
}
// Save all child control settings.
public static void SaveChildSettings(string app_name,
Control parent)
{
foreach (Control child in parent.Controls)
{
// Save the child's value.
switch (child.GetType().Name)
{
case "TextBox":
case "ListBox":
case "ComboBox":
SaveSetting(app_name, child.Name, child.Text);
break;
case "CheckBox":
CheckBox chk = child as CheckBox;
SaveSetting(app_name, child.Name,
chk.Checked.ToString());
break;
case "RadioButton":
RadioButton rad = child as RadioButton;
SaveSetting(app_name, child.Name,
rad.Checked.ToString());
break;
case "VScrollBar":
VScrollBar vscr = child as VScrollBar;
SaveSetting(app_name, child.Name, vscr.Value);
break;
case "HScrollBar":
HScrollBar hscr = child as HScrollBar;
SaveSetting(app_name, child.Name, hscr.Value);
break;
case "NumericUpDown":
NumericUpDown nud = child as NumericUpDown;
SaveSetting(app_name, child.Name, nud.Value);
break;
case "CheckedListBox":
CheckedListBox lst = child as CheckedListBox;
for (int i = 0; i < lst.Items.Count; i++)
{
// Default is false.
if (lst.GetItemChecked(i))
{
string item_name = child.Name + "(" + i.ToString() + ")";
SaveSetting(app_name, item_name, "True");
}
}
break;
// Add other control types here.
}
// Recursively save the child's children.
SaveChildSettings(app_name, child);
}
}
}
}
Và trên Form1.cs
, chúng ta gọi vào hai sự kiện event Form_Load và Form_Closing để sử dụng:
namespace SaveSettingRegistry
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.FormClosing += Form1_FormClosing;
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
RegistryHelper.SaveAllSettings(Application.ProductName, this);
}
private void Form1_Load(object sender, EventArgs e)
{
RegistryHelper.LoadAllSettings(Application.ProductName, this);
}
private void button1_Click(object sender, EventArgs e)
{
RegistryHelper.ClearSettings(Application.ProductName);
}
}
}
Thanks for watching!