using DevExpress.XtraGrid.Views.BandedGrid; using DevExpress.XtraGrid.Views.Grid; using DevExpress.XtraTab; using Lskj.Control.ZKFinger; using Lskj.Util; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using WinFormsControl = System.Windows.Forms.Control; namespace Lskj.Control.Model { public static class StaticBandedControl { public static void ReleaseModuleReferences(WinFormsControl moduleRoot, XtraTabPage modulePage, string moduleCode) { try { List bandedViews = CollectBandedGridViews(moduleRoot); List targetViews = CollectTargetGridViews(moduleRoot); foreach (BandedGridView view in bandedViews) BandedGridDragGrid.DisposeRegistrations( BandedGridViewDragGridDic, BandedTargetViewDragGridDic, view, null); foreach (GridView view in targetViews) BandedGridDragGrid.DisposeRegistrations( BandedGridViewDragGridDic, BandedTargetViewDragGridDic, null, view); if (SourceDragBandedGridView != null && (bandedViews.Contains(SourceDragBandedGridView) || (SourceDragBandedGridView.GridControl != null && SourceDragBandedGridView.GridControl.IsDisposed))) SourceDragBandedGridView = null; RemoveConditionPanels(moduleCode); while (modulePage != null && DogVerifyModuleForms.Remove(modulePage)) { } } catch (Exception exception) { System.Diagnostics.Debug.WriteLine("释放旧 Banded 模块引用失败:" + exception); } } private static List CollectBandedGridViews(WinFormsControl root) { List result = new List(); if (root == null) return result; foreach (WinFormsControl control in EnumerateControls(root)) { DevExpress.XtraGrid.GridControl grid = control as DevExpress.XtraGrid.GridControl; BandedGridView view = grid == null ? null : grid.MainView as BandedGridView; if (view != null && !result.Contains(view)) result.Add(view); } return result; } private static List CollectTargetGridViews(WinFormsControl root) { List result = new List(); if (root == null) return result; foreach (WinFormsControl control in EnumerateControls(root)) { DevExpress.XtraGrid.GridControl grid = control as DevExpress.XtraGrid.GridControl; GridView view = grid == null ? null : grid.MainView as GridView; if (view != null && !result.Contains(view)) result.Add(view); } return result; } private static IEnumerable EnumerateControls(WinFormsControl root) { yield return root; foreach (WinFormsControl child in root.Controls) foreach (WinFormsControl nested in EnumerateControls(child)) yield return nested; } private static void RemoveConditionPanels(string moduleCode) { foreach (string key in ConditionsPanelDic.Keys.ToList()) { ModuleConditionsPanelEx panel; if (string.Equals(key, moduleCode, StringComparison.OrdinalIgnoreCase) || !ConditionsPanelDic.TryGetValue(key, out panel) || panel == null || panel.IsDisposed) ConditionsPanelDic.Remove(key); } } /// /// 记录当前U盾权限窗口 /// public static List DogVerifyModuleForms = new List(); public static List DogVerifyNoPageForms = new List(); /// ///模块打开时的条件界面 /// public static Dictionary ConditionsPanelDic = new Dictionary(); /// /// 表格拖拽类,key值为源表,多表格 /// public static Dictionary> BandedGridViewDragGridDic = new Dictionary>(); /// /// 表格拖拽类,key值为目标表 /// public static Dictionary> BandedTargetViewDragGridDic = new Dictionary>(); /// /// 当前拖拽源表格 /// public static BandedGridView SourceDragBandedGridView; /// /// 指纹识别模块 /// public static FingerHelper fingerHelper; /// /// 进度条 /// public static FrmProgressBar frmProgressBar; } }