当前位置: 首页 > news >正文

C# ini文件全自动界面配置:打开界面时读ini配置到界面各控件,界面上的控件根据ini文件内容自动生成,点保存时把界面各控件的值写到ini里。

用C#窗体 写一个人性化的.ini文件 的配置工具。 打开界面时读ini配置到界面各控件,界面上的控件根据ini文件内容自动生成,点保存时把界面各控件的值写到ini里。
在这里插入图片描述

通用

using FT_Tools;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;


public class ConfigForm : Form
{
    private Dictionary<Control, Tuple<string, string>> controlMap = new Dictionary<Control, Tuple<string, string>>();
    private Button btnSave = new Button { Text = "保存", Dock = DockStyle.Bottom };
    private Panel panel = new Panel { Dock = DockStyle.Fill, AutoScroll = true };

    public ConfigForm()
    {
        Text = "设置";
        WindowState = FormWindowState.Maximized;
        LoadConfig();
        btnSave.Click += (s, e) => SaveConfig();
        Controls.Add(panel);
        Controls.Add(btnSave);
    }

    private void LoadConfig()
    {
        var data = Program.myIni.ReadAll();
        int y = 10;
        foreach (var section in data)
        {
            foreach (var kv in section.Value)
            {
                Label lbl = new Label { Text = kv.Key, Left = 10, Top = y, AutoSize = true };
                Control inputControl;

                if (bool.TryParse(kv.Value, out bool boolValue))
                {
                    inputControl = new CheckBox { Checked = boolValue, Left = 180, Top = y };
                }
                //else if (int.TryParse(kv.Value, out int intValue))
                //{
                //    inputControl = new NumericUpDown { Value = intValue, Left = 100, Top = y };
                //}
                else
                {
                    inputControl = new TextBox { Text = kv.Value, Left = 180, Top = y, Width = 700 };
                }
                controlMap[inputControl] = Tuple.Create(section.Key, kv.Key);
                panel.Controls.Add(lbl);
                panel.Controls.Add(inputControl);
                y += 25;
            }
        }
    }

    private void SaveConfig()
    {
        foreach (var kv in controlMap)
        {
            string value;
            if (kv.Key is TextBox tb)
            {
                value = tb.Text;
            }
            else if (kv.Key is NumericUpDown num)
            {
                value = num.Value.ToString();
            }
            else if (kv.Key is CheckBox cb)
            {
                value = cb.Checked.ToString();
            }
            else
            {
                value = "";
            }
            Program.myIni.Write(kv.Value.Item1, kv.Value.Item2, value);
        }
        MessageBox.Show("配置已保存!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        //重启自己
        Application.Restart();
    }
}

并能定制控制

using FT_Tools;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;


public class ConfigFormF200CKD : Form
{
    private Dictionary<Control, Tuple<string, string>> controlMap = new Dictionary<Control, Tuple<string, string>>();
    private Button btnSave = new Button { Text = "保存", Dock = DockStyle.Bottom };
    private Panel panel = new Panel { Dock = DockStyle.Fill, AutoScroll = true };

    public ConfigFormF200CKD()
    {
        Text = "设置";
        WindowState = FormWindowState.Maximized;
        LoadConfig();
        btnSave.Click += (s, e) => SaveConfig();
        Controls.Add(panel);
        Controls.Add(btnSave);
    }

    private void LoadConfig()
    {
        var data = Program.myIni.ReadAll();
        int y = 10;
        foreach (var section in data)
        {
            foreach (var kv in section.Value)
            {
                Label lbl = new Label { Text = kv.Key, Left = 10, Top = y, AutoSize = true };
                Control inputControl;

                if (bool.TryParse(kv.Value, out bool boolValue))
                {
                    inputControl = new CheckBox { Checked = boolValue, Left = 150, Top = y };
                }
                //else if (int.TryParse(kv.Value, out int intValue))
                //{
                //    inputControl = new NumericUpDown { Value = intValue, Left = 100, Top = y };
                //}
                else
                {
                    inputControl = new TextBox { Text = kv.Value, Left = 150, Top = y, Width = 400 };
                }
                controlMap[inputControl] = Tuple.Create(section.Key, kv.Key);
                panel.Controls.Add(lbl);
                panel.Controls.Add(inputControl);
                { //定制配置
                    if (kv.Key == "mysql数据库IP")
                    {
                        Button btn1 = new Button { Text = "测试", Left = inputControl.Right + 10, Top = y, Width = 100 };
                        btn1.Click += (s, e) => { inputControl.Text = "192.168.8.240"; };
                        panel.Controls.Add(btn1);

                        Button btn2 = new Button { Text = "工厂", Left = inputControl.Right + 10 + 100 + 10, Top = y };
                        btn2.Click += (s, e) => { inputControl.Text = "rm-8vbikz8103zit0xgs3o.mysql.zhangbei.rds.aliyuncs.com"; };
                        panel.Controls.Add(btn2);
                    }
                    else if (kv.Key == "型号")
                    {
                        Button btn1 = new Button { Text = "F100CKD", Left = inputControl.Right + 10, Top = y, Width = 100 };
                        btn1.Click += (s, e) => { inputControl.Text = btn1.Text; };
                        panel.Controls.Add(btn1);

                        Button btn2 = new Button { Text = "F200CKD", Left = inputControl.Right + 10 + 100 + 10, Top = y };
                        btn2.Click += (s, e) => { inputControl.Text = btn2.Text; };
                        panel.Controls.Add(btn2);
                    }
                    else if (kv.Key == "物料标签模板DateCode" || kv.Key.Contains("模板")) //选择一个文件
                    {
                        Button btn1 = new Button { Text = "浏览", Left = inputControl.Right + 10, Top = y, Width = 100 };
                        btn1.Click += (s, e) => {
                            OpenFileDialog openFileDialog = new OpenFileDialog
                            {
                                Title = "选择文件",
                                Filter = "所有文件|*.*|文本文件|*.txt|图片文件|*.jpg;*.png;*.gif",
                                InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
                            };

                            if (openFileDialog.ShowDialog() == DialogResult.OK)
                            {
                                string selectedFilePath = openFileDialog.FileName;
                                //MessageBox.Show("你选择的文件路径是: " + selectedFilePath);
                                inputControl.Text = selectedFilePath;
                            }
                        };
                        panel.Controls.Add(btn1);
                    }
                }
                y += 25;
            }
        }
    }

    private void SaveConfig()
    {
        foreach (var kv in controlMap)
        {
            string value;
            if (kv.Key is TextBox tb)
            {
                value = tb.Text;
            }
            else if (kv.Key is NumericUpDown num)
            {
                value = num.Value.ToString();
            }
            else if (kv.Key is CheckBox cb)
            {
                value = cb.Checked.ToString();
            }
            else
            {
                value = "";
            }
            Program.myIni.Write(kv.Value.Item1, kv.Value.Item2, value);
        }
        MessageBox.Show("配置已保存!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        //重启自己
        Application.Restart();
    }
}

http://www.dtcms.com/a/105720.html

相关文章:

  • 建筑物自动化监测解决方案
  • Docker Api开启TLS认证流程
  • HTTP代理:网页加速的隐形引擎
  • 表单的前端数据流向
  • MATLAB之数据分析图系列:从二维到三维(直接套用)
  • 测试团队UI自动化实施方案
  • 【轻松学C:编程小白的大冒险】— 12.2 瑞士军刀出鞘:switch-case 的多分支江湖
  • 有序数组的归并算法思路
  • 如何实现局域网内无痛访问Jupyter Notebook?
  • Linux中常用服务器监测命令(性能测试监控服务器实用指令)
  • oracle数据泵操作
  • 从零实现Json-Rpc框架】- 项目实现 - 服务端registrydiscovery实现
  • Spring boot 中QPS(Queries Per Second)与 TPS(Transactions Per Second)详细对比
  • struct 中在c++ 和c中用法区别
  • Hue:一个大数据查询工具
  • MSTP多域生成树
  • SpringBoot 7 种实现 HTTP 调用的方式
  • 阶段项目:Windows 服务器的组建与管理
  • java设计模式之桥接模式(重生之我在地府当孟婆)
  • 2025年SQL2API平台推荐:QuickAPI、dbapi 和 Magic API 介绍与对比
  • Kubernetes 入门篇之Master节点部署与安装
  • 基于modbusTcp连接Modbus Slave本地模拟服务通讯(C#编写ModbusTcp类库)(一)
  • VMware Workstation Pro下载链接
  • 【图像去噪】论文复现:灵感源自MAE!进一步解决BSN的局限性,破坏真实噪声的空间相关性!AMSNet的Pytorch源码复现,跑通源码,原理详解!
  • SQL Server:数据库镜像端点检查
  • 图解AUTOSAR_SWS_CANStateManager
  • STM32 FATFS - 在spi的SD卡中运行fatfs
  • 招标采购管理系统智能化亮点应用场景举例
  • 基于Spring Boot的平面设计课程在线学习平台系统的设计与实现(LW+源码+讲解)
  • MySQL五十题