272 lines
11 KiB
C#
272 lines
11 KiB
C#
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)
|
|
{
|
|
List<WinFormsControl> moduleControls = CollectModuleControls(moduleRoot, modulePage);
|
|
ReleaseModuleReferences(moduleControls, modulePage, moduleCode);
|
|
}
|
|
|
|
internal static void ReleaseModuleReferences(
|
|
IEnumerable<WinFormsControl> moduleControls,
|
|
XtraTabPage modulePage,
|
|
string moduleCode)
|
|
{
|
|
try
|
|
{
|
|
List<WinFormsControl> controls = new List<WinFormsControl>();
|
|
if (moduleControls != null)
|
|
foreach (WinFormsControl control in moduleControls)
|
|
if (control != null && !ContainsControl(controls, control))
|
|
controls.Add(control);
|
|
List<BandedGridView> bandedViews = CollectBandedGridViews(controls);
|
|
List<GridView> targetViews = CollectTargetGridViews(controls);
|
|
foreach (BandedGridView view in bandedViews)
|
|
BandedGridDragGrid.DisposeRegistrations(
|
|
BandedGridViewDragGridDic,
|
|
BandedTargetViewDragGridDic,
|
|
view,
|
|
null);
|
|
foreach (GridView view in targetViews)
|
|
BandedGridDragGrid.DisposeRegistrations(
|
|
BandedGridViewDragGridDic,
|
|
BandedTargetViewDragGridDic,
|
|
null,
|
|
view);
|
|
if (ContainsBandedGridView(bandedViews, SourceDragBandedGridView))
|
|
SourceDragBandedGridView = null;
|
|
RemoveConditionPanels(moduleCode, controls);
|
|
RemoveProtectedReferences(controls, modulePage);
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
System.Diagnostics.Debug.WriteLine("释放旧 Banded 模块引用失败:" + exception);
|
|
}
|
|
}
|
|
|
|
private static List<WinFormsControl> CollectModuleControls(
|
|
WinFormsControl moduleRoot,
|
|
XtraTabPage modulePage)
|
|
{
|
|
List<WinFormsControl> result = new List<WinFormsControl>();
|
|
AddModuleControls(result, moduleRoot);
|
|
if (!ReferenceEquals(moduleRoot, modulePage))
|
|
AddModuleControls(result, modulePage);
|
|
return result;
|
|
}
|
|
|
|
private static void AddModuleControls(
|
|
List<WinFormsControl> target,
|
|
WinFormsControl root)
|
|
{
|
|
if (root == null)
|
|
return;
|
|
foreach (WinFormsControl control in EnumerateControls(root))
|
|
if (!ContainsControl(target, control))
|
|
target.Add(control);
|
|
}
|
|
|
|
private static List<BandedGridView> CollectBandedGridViews(
|
|
IEnumerable<WinFormsControl> controls)
|
|
{
|
|
List<BandedGridView> result = new List<BandedGridView>();
|
|
if (controls == null)
|
|
return result;
|
|
foreach (WinFormsControl control in controls)
|
|
{
|
|
DevExpress.XtraGrid.GridControl grid = control as DevExpress.XtraGrid.GridControl;
|
|
if (grid == null)
|
|
continue;
|
|
try
|
|
{
|
|
AddBandedGridView(result, grid.MainView as BandedGridView);
|
|
foreach (DevExpress.XtraGrid.Views.Base.BaseView baseView in grid.ViewCollection)
|
|
AddBandedGridView(result, baseView as BandedGridView);
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
System.Diagnostics.Debug.WriteLine("读取旧 Banded 表格视图失败:" + exception);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
private static void AddBandedGridView(
|
|
List<BandedGridView> target,
|
|
BandedGridView view)
|
|
{
|
|
if (view != null && !ContainsBandedGridView(target, view))
|
|
target.Add(view);
|
|
}
|
|
|
|
private static bool ContainsBandedGridView(
|
|
IEnumerable<BandedGridView> gridViews,
|
|
BandedGridView value)
|
|
{
|
|
if (gridViews == null || value == null)
|
|
return false;
|
|
foreach (BandedGridView gridView in gridViews)
|
|
if (ReferenceEquals(gridView, value))
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
private static List<GridView> CollectTargetGridViews(
|
|
IEnumerable<WinFormsControl> controls)
|
|
{
|
|
List<GridView> result = new List<GridView>();
|
|
if (controls == null)
|
|
return result;
|
|
foreach (WinFormsControl control in controls)
|
|
{
|
|
DevExpress.XtraGrid.GridControl grid = control as DevExpress.XtraGrid.GridControl;
|
|
if (grid == null)
|
|
continue;
|
|
try
|
|
{
|
|
AddGridView(result, grid.MainView as GridView);
|
|
foreach (DevExpress.XtraGrid.Views.Base.BaseView baseView in grid.ViewCollection)
|
|
AddGridView(result, baseView as GridView);
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
System.Diagnostics.Debug.WriteLine("读取旧 Banded 目标表格视图失败:" + exception);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
private static void AddGridView(List<GridView> target, GridView view)
|
|
{
|
|
if (view != null && !ContainsGridView(target, view))
|
|
target.Add(view);
|
|
}
|
|
|
|
private static bool ContainsGridView(
|
|
IEnumerable<GridView> gridViews,
|
|
GridView value)
|
|
{
|
|
if (gridViews == null || value == null)
|
|
return false;
|
|
foreach (GridView gridView in gridViews)
|
|
if (ReferenceEquals(gridView, value))
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
private static IEnumerable<WinFormsControl> 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,
|
|
IEnumerable<WinFormsControl> moduleControls)
|
|
{
|
|
foreach (string key in ConditionsPanelDic.Keys.ToList())
|
|
{
|
|
ModuleConditionsPanelEx panel;
|
|
if (!ConditionsPanelDic.TryGetValue(key, out panel) || panel == null || panel.IsDisposed)
|
|
{
|
|
ConditionsPanelDic.Remove(key);
|
|
continue;
|
|
}
|
|
|
|
if (string.Equals(key, moduleCode, StringComparison.OrdinalIgnoreCase) &&
|
|
IsConditionPanelOwnedByModule(panel, moduleControls))
|
|
ConditionsPanelDic.Remove(key);
|
|
}
|
|
}
|
|
|
|
private static bool IsConditionPanelOwnedByModule(
|
|
ModuleConditionsPanelEx panel,
|
|
IEnumerable<WinFormsControl> moduleControls)
|
|
{
|
|
if (panel == null)
|
|
return false;
|
|
if (ContainsControl(moduleControls, panel) || ContainsControl(moduleControls, panel.Owner))
|
|
return true;
|
|
|
|
MyControl parentControl = panel.ParentControlObj;
|
|
return parentControl != null &&
|
|
parentControl.MainGridEx != null &&
|
|
ContainsControl(moduleControls, parentControl.MainGridEx);
|
|
}
|
|
|
|
private static void RemoveProtectedReferences(
|
|
IEnumerable<WinFormsControl> moduleControls,
|
|
XtraTabPage modulePage)
|
|
{
|
|
while (modulePage != null && DogVerifyModuleForms.Remove(modulePage))
|
|
{
|
|
}
|
|
foreach (XtraTabPage item in DogVerifyModuleForms.ToList())
|
|
if (item == null || item.IsDisposed || ContainsControl(moduleControls, item))
|
|
DogVerifyModuleForms.Remove(item);
|
|
foreach (IForm item in DogVerifyNoPageForms.ToList())
|
|
if (item == null || item.SubForm == null || item.SubForm.IsDisposed ||
|
|
ContainsControl(moduleControls, item.SubForm))
|
|
DogVerifyNoPageForms.Remove(item);
|
|
}
|
|
|
|
private static bool ContainsControl(
|
|
IEnumerable<WinFormsControl> moduleControls,
|
|
WinFormsControl value)
|
|
{
|
|
if (moduleControls == null || value == null)
|
|
return false;
|
|
foreach (WinFormsControl control in moduleControls)
|
|
if (ReferenceEquals(control, value))
|
|
return true;
|
|
return false;
|
|
}
|
|
/// <summary>
|
|
/// 记录当前U盾权限窗口
|
|
/// </summary>
|
|
public static List<XtraTabPage> DogVerifyModuleForms = new List<XtraTabPage>();
|
|
public static List<IForm> DogVerifyNoPageForms = new List<IForm>();
|
|
/// <summary>
|
|
///模块打开时的条件界面
|
|
/// </summary>
|
|
public static Dictionary<string, ModuleConditionsPanelEx> ConditionsPanelDic = new Dictionary<string, ModuleConditionsPanelEx>();
|
|
|
|
/// <summary>
|
|
/// 表格拖拽类,key值为源表,多表格
|
|
/// </summary>
|
|
public static Dictionary<BandedGridView, List<BandedGridDragGrid>> BandedGridViewDragGridDic = new Dictionary<BandedGridView, List<BandedGridDragGrid>>();
|
|
/// <summary>
|
|
/// 表格拖拽类,key值为目标表
|
|
/// </summary>
|
|
public static Dictionary<GridView, List<BandedGridDragGrid>> BandedTargetViewDragGridDic = new Dictionary<GridView, List<BandedGridDragGrid>>();
|
|
|
|
/// <summary>
|
|
/// 当前拖拽源表格
|
|
/// </summary>
|
|
public static BandedGridView SourceDragBandedGridView;
|
|
/// <summary>
|
|
/// 指纹识别模块
|
|
/// </summary>
|
|
public static FingerHelper fingerHelper;
|
|
/// <summary>
|
|
/// 进度条
|
|
/// </summary>
|
|
public static FrmProgressBar frmProgressBar;
|
|
}
|
|
}
|