214 lines
7.1 KiB
Python
214 lines
7.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
精简 Designer.cs:只保留设计器需要的最小属性集,
|
|
去掉旧工具写入的全量属性垃圾(几十行默认值/无效值),
|
|
解决 SharpDevelop 设计时 ArgumentOutOfRangeException。
|
|
"""
|
|
import io
|
|
import re
|
|
import os
|
|
import glob
|
|
|
|
BASE = r"C:\Users\099978\Documents\SharpDevelop Projects\成套报价软件\成套报价软件"
|
|
|
|
# 允许保留的属性行前缀模式
|
|
KEEP_PROPS = [
|
|
# ★ 控件创建语句(new) — 绝对不能删
|
|
r"this\.\w+\s*=\s*new",
|
|
r"\w+\s*=\s*new",
|
|
r"new\s+System\.Windows\.Forms\.",
|
|
r"new\s+Smart\.CustomComponents\.",
|
|
r"new\s+Zuby\.ADGV\.",
|
|
r"new\s+CJZZ\.Controls\.",
|
|
r"new\s+System\.Drawing\.",
|
|
r"new\s+System\.ComponentModel\.",
|
|
# 列字段创建
|
|
r"dataGridViewTextBoxColumn\d+\s*=",
|
|
r"dataGridViewCheckBoxColumn\d+\s*=",
|
|
r"dataGridViewComboBoxColumn\d+\s*=",
|
|
r"System\.Windows\.Forms\.DataGridView\w+Column",
|
|
r"this\.\w+\.Name\s*=",
|
|
r"this\.\w+\.Size\s*=",
|
|
r"this\.\w+\.Location\s*=",
|
|
r"this\.\w+\.Text\s*=",
|
|
r"this\.\w+\.TabIndex\s*=",
|
|
r"this\.\w+\.Dock\s*=",
|
|
r"this\.\w+\.Anchor\s*=",
|
|
r"this\.\w+\.Font\s*=",
|
|
r"this\.\w+\.BackColor\s*=",
|
|
r"this\.\w+\.ForeColor\s*=",
|
|
r"this\.\w+\.Enabled\s*=",
|
|
r"this\.\w+\.Visible\s*=",
|
|
r"this\.\w+\.ReadOnly\s*=",
|
|
r"this\.\w+\.Multiline\s*=",
|
|
r"this\.\w+\.WordWrap\s*=",
|
|
r"this\.\w+\.ScrollBars\s*=",
|
|
r"this\.\w+\.SelectedIndex\s*=\s*[0-9]", # 只保留>=0的
|
|
r"this\.\w+\.Items\.Add",
|
|
r"this\.\w+\.Items\.AddRange",
|
|
r"this\.\w+\.Items\.Clear",
|
|
r"this\.\w+\.Columns\.Add",
|
|
r"this\.\w+\.Columns\.AddRange",
|
|
r"this\.\w+\.Rows\.Add",
|
|
r"this\.\w+\.Controls\.Add",
|
|
r"this\.\w+\.Controls\.AddRange",
|
|
r"this\.\w+\.Controls\.Clear",
|
|
r"this\.\w+\.HeaderText\s*=",
|
|
r"this\.\w+\.Width\s*=",
|
|
r"this\.\w+\.DataPropertyName\s*=",
|
|
r"this\.\w+\.SortMode\s*=",
|
|
r"this\.\w+\.ReadOnly\s*=",
|
|
r"this\.\w+\.Frozen\s*=",
|
|
r"this\.\w+\.AutoSizeMode\s*=\s*System\.Windows\.Forms\.DataGridViewAutoSizeMode",
|
|
r"this\.\w+\.Visible\s*=",
|
|
r"this\.\w+\.DefaultCellStyle\.",
|
|
r"this\.\w+\.UseVisualStyleBackColor\s*=",
|
|
r"this\.\w+\.Checked\s*=",
|
|
r"this\.\w+\.CheckState\s*=",
|
|
r"this\.\w+\.CheckOnClick\s*=",
|
|
r"this\.\w+\.Style\s*=\s*Smart\.CustomComponents", # Smart 控件样式枚举
|
|
r"this\.\w+\.Radius\s*=",
|
|
r"this\.\w+\.PlaceholderText\s*=",
|
|
r"this\.\w+\.MultiSelect\s*=",
|
|
r"this\.\w+\.Searchable\s*=",
|
|
r"this\.\w+\.AllowCustomInput\s*=",
|
|
r"this\.\w+\.Flat\s*=",
|
|
r"this\.\w+\.AllowUserToAddRows\s*=",
|
|
r"this\.\w+\.AllowUserToDeleteRows\s*=",
|
|
r"this\.\w+\.AllowUserToOrderColumns\s*=",
|
|
r"this\.\w+\.AllowUserToResizeColumns\s*=",
|
|
r"this\.\w+\.AllowUserToResizeRows\s*=",
|
|
r"this\.\w+\.AutoSize\b",
|
|
r"this\.\w+\.AutoScroll\s*=",
|
|
r"this\.\w+\.RowHeadersVisible\s*=",
|
|
r"this\.\w+\.ColumnHeadersVisible\s*=",
|
|
r"this\.\w+\.SelectionMode\s*=",
|
|
r"this\.\w+\.EditMode\s*=",
|
|
r"this\.\w+\.BackgroundColor\s*=",
|
|
r"this\.\w+\.EnableHeadersVisualStyles\s*=",
|
|
r"this\.\w+\.EnableExcelStyleSelection\s*=",
|
|
r"this\.\w+\.RowHeadersWidth\s*=",
|
|
r"this\.\w+\.ColumnHeadersHeight\s*=",
|
|
r"this\.\w+\.RowHeadersWidthSizeMode\s*=",
|
|
r"this\.\w+\.ColumnHeadersHeightSizeMode\s*=",
|
|
r"this\.\w+\.BorderStyle\s*=",
|
|
r"this\.\w+\.CellBorderStyle\s*=",
|
|
r"this\.\w+\.GridColor\s*=",
|
|
r"this\.\w+\.ClipboardCopyMode\s*=",
|
|
r"this\.\w+\.MultiSelect\s*=",
|
|
r"this\.\w+\.StandardTab\s*=",
|
|
r"this\.\w+\.VirtualMode\s*=",
|
|
r"this\.\w+\.ImageKey\s*=",
|
|
r"this\.\w+\.ImageScaling\s*=",
|
|
r"this\.\w+\.DisplayStyle\s*=",
|
|
r"this\.\w+\.TextAlign\s*=\s*System\.Drawing", # 只留 ContentAlignment
|
|
r"this\.\w+\.TextDirection\s*=",
|
|
r"this\.\w+\.ToolTipText\s*=",
|
|
r"this\.\w+\.AutoSize\b.*=\s*true",
|
|
# 窗体自身属性
|
|
r"this\.AutoScaleDimensions\s*=",
|
|
r"this\.AutoScaleMode\s*=",
|
|
r"this\.ClientSize\s*=",
|
|
r"this\.Name\s*=",
|
|
r"this\.Text\s*=",
|
|
r"this\.FormBorderStyle\s*=",
|
|
r"this\.StartPosition\s*=",
|
|
r"this\.WindowState\s*=",
|
|
r"this\.MaximizeBox\s*=",
|
|
r"this\.MinimizeBox\s*=",
|
|
r"this\.ControlBox\s*=",
|
|
r"this\.ShowInTaskbar\s*=",
|
|
r"this\.TopMost\s*=",
|
|
r"this\.Opacity\s*=",
|
|
r"this\.ShowIcon\s*=",
|
|
r"this\.Icon\s*=",
|
|
r"this\.KeyPreview\s*=",
|
|
r"this\.AutoValidate\s*=",
|
|
r"this\.Padding\s*=\s*new\s+System\.Windows\.Forms\.Padding\([1-9]", # 只留非零Padding
|
|
r"this\.MainMenuStrip\s*=",
|
|
# 控件本身(非 this)的属性
|
|
r"\w+\.Name\s*=",
|
|
r"\w+\.HeaderText\s*=",
|
|
r"\w+\.Width\s*=",
|
|
r"\w+\.DataPropertyName\s*=",
|
|
r"\w+\.SortMode\s*=",
|
|
r"\w+\.ReadOnly\s*=",
|
|
r"\w+\.Frozen\s*=",
|
|
r"\w+\.Visible\s*=",
|
|
r"\w+\.AutoSizeMode\s*=",
|
|
r"\w+\.DefaultCellStyle\.",
|
|
]
|
|
|
|
# 编译为正则列表
|
|
KEEP_RE = [re.compile(p) for p in KEEP_PROPS]
|
|
|
|
# 绝对排除的(即使匹配 KEEP 也要删掉——已知导致设计器崩溃的)
|
|
HARD_KILL = [
|
|
r"this\.\w+\.Padding\s*=\s*new\s+System\.Windows\.Forms\.Padding\(0,\s*0,\s*0,\s*0\)",
|
|
r"this\.\w+\.SelectedIndex\s*=\s*-1",
|
|
r"this\.\w+\.DropDownWidth\s*=\s*0",
|
|
r"this\.\w+\.DropDownHeight\s*=\s*0",
|
|
r"this\.\w+\.MaximumSize\s*=\s*new\s+System\.Drawing\.Size\(0,\s*0\)",
|
|
r"this\.\w+\.MinimumSize\s*=\s*new\s+System\.Drawing\.Size\(0,\s*0\)",
|
|
r"this\.\w+\.Margin\s*=", # Margin 对设计器布局影响大,删掉
|
|
]
|
|
HARD_KILL_RE = [re.compile(p) for p in HARD_KILL]
|
|
|
|
|
|
def should_keep(line):
|
|
st = line.strip()
|
|
if not st or st.startswith("//") or st.startswith("#"):
|
|
return True # 注释空行保留
|
|
# 不是赋值语句的直接保留(如 new, SuspendLayout, Controls.Add 等)
|
|
if "=" not in st and ".Add" not in st and ".Clear" not in st:
|
|
return True
|
|
# 硬排除
|
|
for kr in HARD_KILL_RE:
|
|
if kr.search(st):
|
|
return False
|
|
# 白名单
|
|
for kr in KEEP_RE:
|
|
if kr.search(st):
|
|
return True
|
|
# 其他赋值语句 → 删掉
|
|
if re.match(r"this\.\w+\.\w+\s*=", st) or re.match(r"\w+\.\w+\s*=", st):
|
|
return False
|
|
return True # 非赋值行保留
|
|
|
|
|
|
def clean_file(path):
|
|
s = io.open(path, encoding="utf-8-sig").read()
|
|
lines = s.split("\n")
|
|
out = []
|
|
removed = 0
|
|
for line in lines:
|
|
if should_keep(line):
|
|
out.append(line)
|
|
else:
|
|
removed += 1
|
|
# 去掉连续空行
|
|
result = []
|
|
prev_blank = False
|
|
for l in out:
|
|
blank = l.strip() == ""
|
|
if blank and prev_blank:
|
|
continue
|
|
result.append(l)
|
|
prev_blank = blank
|
|
s2 = "\n".join(result)
|
|
if s2 != s:
|
|
io.open(path, "w", encoding="utf-8-sig", newline="\r\n").write(s2)
|
|
return removed
|
|
|
|
|
|
if __name__ == "__main__":
|
|
total = 0
|
|
for pattern in ["xiangmu/*.Designer.cs", "shezhi/*.Designer.cs",
|
|
"ku/*.Designer.cs", "GCS母排计算/*.Designer.cs"]:
|
|
for f in glob.glob(os.path.join(BASE, pattern)):
|
|
n = clean_file(f)
|
|
total += n
|
|
if n > 0:
|
|
print("%s: 删除 %d 行冗余属性" % (os.path.basename(f), n))
|
|
print("\n共删除 %d 行" % total)
|