基线:全量源码首提(D1 版本控制落地,含第一轮优化 B1-B4/A1/A4/缩放修复)
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
// 旧版双 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); }
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user