Files
ctbjrj/成套报价软件/MainForm.旧页签兼容.cs

94 lines
4.0 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 旧版双 TabControl 布局的兼容层。
// 旧项目主窗口结构:tabControl1(顶部 项目/报价/设置) + tabControl2(左 项目/报价/选型) + tabControl3(右 元件库/用户库/...)。
// 新项目改为停靠面板后,旧逻辑里的 tabControl2/tabPageN 引用通过本文件映射到停靠窗口。
using System;
using WeifenLuo.WinFormsUI.Docking;
namespace 成套报价软件
{
public partial class MainForm
{
private 旧选项卡兼容 _tabControl2兼容;
/// <summary>旧 tabControl2 → 停靠面板当前活动文档。</summary>
internal 旧选项卡兼容 tabControl2 {
get {
if (_tabControl2兼容 == null) {
_tabControl2兼容 = new 旧选项卡兼容(delegate { return this.dockSurface1.ActiveContent as DockContent; });
}
return _tabControl2兼容;
}
}
// ---- 旧页签名 → 新控件别名(旧代码 this.tabPageN 继续可用)----
/// <summary>旧左侧"项目"页 → 停靠窗口"项目"。</summary>
public DockContent tabPage3 { get { return this.w1; } }
/// <summary>旧左侧"报价"页 → 停靠窗口"报价"。</summary>
public DockContent tabPage4 { get { return this.w2; } }
/// <summary>旧左侧"选型"页 → 停靠窗口"选型"。</summary>
public DockContent tabPage10 { get { return this.w3; } }
/// <summary>旧右侧"元件库"页 → 停靠窗口"元件库"。</summary>
public DockContent tabPage5 { get { return this.w4; } }
/// <summary>旧右侧"用户库"页 → 停靠窗口"用户库"。</summary>
public DockContent tabPage6 { get { return this.w5; } }
/// <summary>旧右侧"柜体库"页 → 停靠窗口"柜体库"。</summary>
public DockContent tabPage11 { get { return this.w6; } }
/// <summary>旧右侧"母排"页 → 停靠窗口"母排"。</summary>
public DockContent tabPage12 { get { return this.w7; } }
/// <summary>旧右侧"方案"页 → 停靠窗口"方案"。</summary>
public DockContent tabPage13 { get { return this.w8; } }
/// <summary>旧右侧"箱体计算"页 → 停靠窗口"箱体计算"。</summary>
public DockContent tabPage14 { get { return this.w9; } }
}
/// <summary>
/// 旧 TabControl 的兼容壳:
/// SelectedTab → 停靠面板当前活动停靠窗口(读),激活该窗口(写);
/// SelectedIndexChanged → 由 dockSurface1.ActiveContentChanged 触发(见 MainForm.DockSurface1ActiveContentChanged)。
/// </summary>
internal class 旧选项卡兼容
{
private readonly Func<DockContent> _active;
private DockContent _lastSeen;
public 旧选项卡兼容(Func<DockContent> active)
{
_active = active;
}
/// <summary>当前活动停靠窗口;无活动文档时为 null。赋值 = 激活对应停靠窗口。</summary>
public DockContent SelectedTab {
get { return _active(); }
set {
var d = value;
if (d != null) { d.Show(); d.Activate(); }
}
}
/// <summary>本次事件触发之前的活动停靠窗口(识别"从哪页切过来";null=未知/首次触发)。</summary>
public DockContent PreviousSelectedTab { get; private set; }
/// <summary>最近一次真实活动的停靠窗口(不会被单元格编辑导致的 null 闪断清空)。</summary>
public DockContent 最后活动窗口 { get { return _lastSeen; } }
public event EventHandler SelectedIndexChanged;
internal void RaiseSelectedIndexChanged()
{
// ★ 停靠版关键防护:点击单元格时焦点进入编辑控件,ActiveContent 会
// 瞬时闪断成 null 再跳回原窗口。这不是页签切换,必须忽略——
// 否则会触发全量保存+重算,表格刷新导致选中乱跑、刚插入的行被冲掉。
var cur = _active();
if (cur == null) return; // 焦点瞬时离开停靠面板(单元格编辑/浮动工具窗)
if (cur == _lastSeen) return; // 活动窗口没有真正变化
// 先记录切换来源再广播,供订阅方判断"从哪页切到哪页"
PreviousSelectedTab = _lastSeen;
_lastSeen = cur;
var h = SelectedIndexChanged;
if (h != null) { h(this, EventArgs.Empty); }
}
}
}