
完整优化代码核心修复动态参数不显示问题:把动态参数区从FlowLayoutPanel换成TableLayoutPanel(两列:Label列+控件列),逐行 Add,配合AutoScroll=true,绝对能显示。using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Windows.Forms; using Newtonsoft.Json; using ZwSoft.ZwCAD.DatabaseServices; using ZwSoft.ZwCAD.ApplicationServices; namespace PipeQC.UI { public partial class QCItemConfigForm : Form { private QCItemMeta _meta; private QCUserConfig _oldUserCfg; private Dictionarystring, object _userParamDict; public QCUserConfig ResultUserConfig { get; private set; } private CheckedListBox _chkLayers; private CheckedListBox _chkEntityTypes; private HashSetstring _layersNotInDwg = new HashSetstring(); private Dictionarystring, Control _dynamicControlMap = new Dictionarystring, Control(); //保留公共区面板引用,重置时只重建这两块 private Panel _panelCommon; private Panel _panelDynamic; public QCItemConfigForm(QCItemMeta meta, QCUserConfig userCfg) { _meta = meta; _oldUserCfg = userCfg; this.Text = $"{meta.ItemShowName} 参数配置"; this.Size = new System.Drawing.Size(560, 580); this.MinimumSize = new System.Drawing.Size(500, 480); this.StartPosition = FormStartPosition.CenterParent; _userParamDict = JsonConvert.DeserializeObjectDictionarystring, object(userCfg.UserParamJson); // ========== 主容器 ========== var mainPanel = new TableLayoutPanel(); mainPanel.Dock = DockStyle.Fill; mainPanel.RowCount = 3; mainPanel.ColumnCount = 1; mainPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 60F)); mainPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 40F)); mainPanel.RowStyles.Add(new RowStyle(SizeType.Absolute, 45F)); mainPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); this.Controls.Add(mainPanel); // ---------- 公共区(图层+实体类型 左右两列)---------- _panelCommon = new Panel(); _panelCommon.Dock = DockStyle.Fill; BuildCommonArea(_panelCommon); mainPanel.Controls.Add(_panelCommon, 0, 0); // ---------- 动态参数区 ---------- _panelDynamic = new Panel(); _panelDynamic.Dock = DockStyle.Fill; BuildDynamicParamArea(_panelDynamic); mainPanel.Controls.Add(_panelDynamic, 0, 1); // ---------- 底部按钮 ---------- var btnPanel = new FlowLayoutPanel(); btnPanel.Dock = DockStyle.Fill; btnPanel.FlowDirection = FlowDirection.RightToLeft; btnPanel.Padding = new Padding(0, 6, 8, 0); var btnSave = new Button() { Text = "保存", Width = 90, Height = 28 }; var btnReset = new Button() { Text = "重置默认", Width = 90, Height = 28 }; var btnCancel = new Button() { Text = "取消", Width = 90, Height = 28 }; btnSave.Click += (s, e) = { CollectControlValue(); this.DialogResult = DialogResult.OK; ResultUserConfig = _oldUserCfg; ResultUserConfig.UserParamJson = JsonConvert.SerializeObject(_userParamDict, Newtonsoft.Json.Formatting.Indented); this.Close(); }; btnReset.Click += (s, e) = { _userParamDict = JsonConvert.DeserializeObjectDictionarystring, object(_meta.DefaultJson); _panelCommon.Controls.Clear(); BuildCommonArea(_panelCommon); _panelDynamic.Controls.Clear(); BuildDynamicParamArea(_panelDynamic); }; btnCancel.Click += (s, e) = { this.DialogResult = DialogResult.Cancel; this.Close(); }; btnPanel.Controls.AddRange(new Control[] { btnCancel, btnReset, btnSave }); mainPanel.Controls.Add(btnPanel, 0, 2); }