# -*- coding: utf-8 -*- """把 24 个按钮的 Image 行(FromFile 形态)写进 MainForm.Designer.cs——设计器里直接显示图标。 锚定 .Name = "原字段名" 行(SD 重序列化后变量名是 ribbonButtonN,不能依赖变量名),Image 紧随其后。 路径用本机绝对路径(设计器进程 CWD 不可控);FromFile 找不到文件返回 null 不抛异常, 换机后设计器只是不画图,运行时由 MainForm.cs 用 BaseDirectory 兜底。幂等。""" import io import os import re ROOT = r"C:\Users\099978\Documents\SharpDevelop Projects\成套报价软件" DSG = os.path.join(ROOT, "成套报价软件", "MainForm.Designer.cs") ICON_DIR = os.path.join(ROOT, "成套报价软件", "bin", "Debug", "icons") BIND = { "button1": "new-project", "button2": "edit-project", "button3": "delete-project", "button4": "open-project", "button5": "copy-project", "button7": "export-project", "button8": "import-project", "button9": "open-quote", "button10": "edit-quote", "button17": "save", "button18": "import-quote", "button16": "report", "button15": "busbar", "button13": "factor", "button33": "sort-components", "button29": "template-cost", "button11": "cad-grab", "btn登录": "login", "btn修改密码": "password", "btn会员信息": "member", "btn企业信息": "company", "btn保存布局": "save-layout", "btn备份": "backup", "btn恢复": "restore", } s = io.open(DSG, encoding="utf-8-sig").read() if ".Image = Smart.CustomComponents.RibbonButton.FromFile(" in s: print("Image 行已存在,跳过") else: lines = s.split("\n") out = [] n = 0 name_re = re.compile(r'^\t\t\t([A-Za-z0-9_]+)\.Name = "([^"]+)";') for line in lines: out.append(line) m = name_re.match(line) if m: var, btn = m.group(1), m.group(2) if btn in BIND: png = os.path.join(ICON_DIR, BIND[btn] + ".png") out.append('\t\t\t%s.Image = Smart.CustomComponents.RibbonButton.FromFile("%s");' % (var, png.replace("\\", "\\\\"))) n += 1 assert n == 24, "只锚定 %d 个按钮(期望 24)" % n io.open(DSG, "w", encoding="utf-8-sig").write("\n".join(out)) print("Designer.cs 已插入 %d 行 Image(FromFile)" % n)