using System; using System.Drawing; using System.Windows.Forms; namespace 成套报价软件 { /// /// 批量插入询问 的交互逻辑(2026-10-01): /// 多选箱号插入元件时的确认框(用户已删"仅当前行"按钮,2026-10-01)。 /// 返回 DialogResult:Yes=全部插入 / Cancel=取消 /// 勾选状态读 属性 不再询问(勾选且点了 Yes 才会被调用方记忆) /// 用法:using (var f = new 批量插入询问 { 消息 = "..." }) { f.ShowDialog(父窗体); ... } /// 布局在 批量插入询问.Designer.cs,可用 SD 设计器打开微调。 /// public partial class 批量插入询问 { /// 构造函数:必须调用 InitializeComponent 初始化设计器控件 /// ★ 修复(2026-10-01):此前漏写构造函数,控件全为 null,设置消息时抛 /// NullReferenceException——这就是"点了新建元件没反应不弹窗"的根因。 public 批量插入询问() { InitializeComponent(); } /// 消息文本(设置后按内容自适应标签与窗体高度)。 public string 消息 { get { return lbl消息.Text; } set { lbl消息.Text = value ?? ""; 自适应高度(); } } /// "以后不再询问"复选框勾选状态。 public bool 不再询问 { get { return chk不再询问.Checked; } } /// /// 按消息文本实际高度自适应:标签变高/变矮时,复选框与按钮行跟着移动, /// 窗体高度同步调整(设计器基准布局,运行时只纵向平移,不动横向布局)。 /// private void 自适应高度() { try { lbl消息.AutoSize = false; int textH = TextRenderer.MeasureText(lbl消息.Text, lbl消息.Font, new Size(lbl消息.MaximumSize.Width, 0), TextFormatFlags.WordBreak | TextFormatFlags.TextBoxControl).Height; int delta = textH - lbl消息.Height; if (delta == 0) return; lbl消息.Height = textH; chk不再询问.Top += delta; btn取消.Top += delta; btn全部插入.Top += delta; // 解除设计器设的最大/最小尺寸限制后调整窗体高度 this.MaximumSize = new Size(0, 0); this.MinimumSize = new Size(0, 0); this.Height += delta; } catch { } } } }