You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用config.ini文件修改Windows Forms中按钮的属性?

读取INI配置文件并设置WinForms按钮属性

针对你的需求,下面提供两种实现方式,帮你读取外部config.ini文件并配置按钮属性:

方法一:调用Windows原生API读取INI文件

这种方式贴合标准INI文件的解析逻辑,支持section和key的精准读取:

  1. 先添加API声明类:
using System.Runtime.InteropServices;

public class IniFile
{
    private readonly string _filePath;

    [DllImport("kernel32", CharSet = CharSet.Unicode)]
    private static extern int GetPrivateProfileString(string section, string key, string defaultValue, StringBuilder result, int size, string filePath);

    public IniFile(string filePath)
    {
        _filePath = filePath;
    }

    // 读取指定section下的key值,自动去除值两端的引号
    public string Read(string section, string key)
    {
        var result = new StringBuilder(255);
        GetPrivateProfileString(section, key, "", result, 255, _filePath);
        return result.ToString().Trim('"');
    }
}
  1. 在窗体加载时读取配置并设置按钮:
using System.Drawing;
using System.IO;

private void Form1_Load(object sender, EventArgs e)
{
    // 获取程序目录下的config.ini路径
    string iniPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config.ini");
    
    if (!File.Exists(iniPath))
    {
        MessageBox.Show("未找到配置文件config.ini");
        return;
    }

    var ini = new IniFile(iniPath);

    // 配置Button 1的属性
    button1.Enabled = bool.Parse(ini.Read("Button 1", "isEnabled"));
    button1.BackColor = ColorTranslator.FromHtml(ini.Read("Button 1", "colour"));
    button1.Text = ini.Read("Button 1", "caption");

    // 绑定点击事件逻辑
    string action = ini.Read("Button 1", "action");
    button1.Click += (s, args) =>
    {
        if (string.Equals(action, "Next Page"))
        {
            // 跳转到下一页的逻辑,例如打开新窗体
            new NextMenuForm().Show();
        }
        else
        {
            // 保存字符串并执行打印
            string targetStr = action;
            // 这里添加你的打印逻辑,比如调用PrintDocument
            MessageBox.Show($"已保存并准备打印:{targetStr}");
        }
    };
}

方法二:手动解析INI文件

如果不想调用Win32 API,可以自己实现简单的INI解析逻辑:

  1. 编写解析方法:
private Dictionary<string, Dictionary<string, string>> ParseIni(string filePath)
{
    var iniData = new Dictionary<string, Dictionary<string, string>>();
    string currentSection = null;

    foreach (var line in File.ReadAllLines(filePath))
    {
        var trimmedLine = line.Trim();
        // 跳过注释和空行
        if (trimmedLine.StartsWith("//") || string.IsNullOrEmpty(trimmedLine))
            continue;

        // 识别section
        if (trimmedLine.StartsWith("[") && trimmedLine.EndsWith("]"))
        {
            currentSection = trimmedLine.Substring(1, trimmedLine.Length - 2).Trim();
            iniData[currentSection] = new Dictionary<string, string>();
            continue;
        }

        // 解析key-value对
        if (currentSection != null)
        {
            var parts = trimmedLine.Split(new[] { '=' }, 2);
            if (parts.Length == 2)
            {
                var key = parts[0].Trim();
                var value = parts[1].Trim().Trim('"');
                iniData[currentSection][key] = value;
            }
        }
    }
    return iniData;
}
  1. 在窗体加载时使用解析结果:
private void Form1_Load(object sender, EventArgs e)
{
    string iniPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config.ini");
    if (!File.Exists(iniPath))
    {
        MessageBox.Show("未找到配置文件config.ini");
        return;
    }

    var iniData = ParseIni(iniPath);
    if (!iniData.ContainsKey("Button 1")) return;

    var btnConfig = iniData["Button 1"];

    // 逐一设置按钮属性
    if (btnConfig.ContainsKey("isEnabled"))
        button1.Enabled = bool.Parse(btnConfig["isEnabled"]);
    if (btnConfig.ContainsKey("colour"))
        button1.BackColor = ColorTranslator.FromHtml(btnConfig["colour"]);
    if (btnConfig.ContainsKey("caption"))
        button1.Text = btnConfig["caption"];
    if (btnConfig.ContainsKey("action"))
    {
        string action = btnConfig["action"];
        button1.Click += (s, args) =>
        {
            if (string.Equals(action, "Next Page"))
            {
                // 跳转逻辑
            }
            else
            {
                string targetStr = action;
                // 打印逻辑
            }
        };
    }
}

额外提示

  • 发布程序时,记得将config.ini和exe放在同一目录下
  • 如果有多个按钮,可以循环读取[Button 1]、[Button 2]等section,动态创建按钮或批量配置
  • 颜色值建议使用标准HTML格式(如#FFFFFF),避免解析异常

内容的提问来源于stack exchange,提问作者SamONeill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 21:50:33