Compare commits
3 Commits
b091eca540
...
d098dde830
| Author | SHA1 | Date | |
|---|---|---|---|
| d098dde830 | |||
| ef13d46fa2 | |||
| fc5faab65d |
@@ -637,6 +637,11 @@ namespace Lskj.Control
|
|||||||
}
|
}
|
||||||
|
|
||||||
_gridResourcesDisposed = true;
|
_gridResourcesDisposed = true;
|
||||||
|
if (cellHelper != null)
|
||||||
|
{
|
||||||
|
cellHelper.Dispose();
|
||||||
|
cellHelper = null;
|
||||||
|
}
|
||||||
StopColumnSourceTimer();
|
StopColumnSourceTimer();
|
||||||
if (mTimer != null)
|
if (mTimer != null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -12,10 +12,15 @@ using DevExpress.XtraGrid.Views.Grid;
|
|||||||
using DevExpress.XtraGrid.Views.Grid.ViewInfo;
|
using DevExpress.XtraGrid.Views.Grid.ViewInfo;
|
||||||
|
|
||||||
// Token: 0x02000003 RID: 3
|
// Token: 0x02000003 RID: 3
|
||||||
public class AmountCellRender
|
public class AmountCellRender : IDisposable
|
||||||
{
|
{
|
||||||
public AmountCellRender(GridView gridView_0)
|
public AmountCellRender(GridView gridView_0)
|
||||||
{
|
{
|
||||||
|
if (gridView_0 == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("gridView_0");
|
||||||
|
}
|
||||||
|
|
||||||
Class5.gBkiB4AzUqwkh();
|
Class5.gBkiB4AzUqwkh();
|
||||||
this.colorGray = Color.FromArgb(189, 185, 185);
|
this.colorGray = Color.FromArgb(189, 185, 185);
|
||||||
this.colorGreen = Color.Green;
|
this.colorGreen = Color.Green;
|
||||||
@@ -25,23 +30,58 @@ public class AmountCellRender
|
|||||||
this.dictionary_0 = new Dictionary<string, Class2>();
|
this.dictionary_0 = new Dictionary<string, Class2>();
|
||||||
this.list_0 = new List<GridColumn>();
|
this.list_0 = new List<GridColumn>();
|
||||||
this.object_0 = gridView_0;
|
this.object_0 = gridView_0;
|
||||||
|
this.gridControl_0 = this.object_0.GridControl;
|
||||||
this.object_0.CustomDrawCell += this.object_0_CustomDrawCell;
|
this.object_0.CustomDrawCell += this.object_0_CustomDrawCell;
|
||||||
this.object_0.CustomDrawColumnHeader += this.object_0_CustomDrawColumnHeader;
|
this.object_0.CustomDrawColumnHeader += this.object_0_CustomDrawColumnHeader;
|
||||||
this.object_0.CustomDrawFooterCell += this.object_0_CustomDrawFooterCell;
|
this.object_0.CustomDrawFooterCell += this.object_0_CustomDrawFooterCell;
|
||||||
this.object_0.GridControl.Paint += this.method_0;
|
if (this.gridControl_0 != null)
|
||||||
|
{
|
||||||
|
this.gridControl_0.Paint += this.method_0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void method_0(object sender, PaintEventArgs e)
|
private void method_0(object sender, PaintEventArgs e)
|
||||||
{
|
{
|
||||||
BaseViewInfo viewInfo = ((sender as GridControl).FocusedView as GridView).GetViewInfo();
|
if (this.disposed || this.list_0.Count == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
GridControl gridControl = sender as GridControl;
|
||||||
|
if (gridControl == null || gridControl.IsDisposed || gridControl.Disposing)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
GridView gridView = gridControl.FocusedView as GridView;
|
||||||
|
if (gridView == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
GridViewInfo gridViewInfo = gridView.GetViewInfo() as GridViewInfo;
|
||||||
|
if (gridViewInfo == null || gridViewInfo.ColumnsInfo == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
foreach (GridColumn gridColumn in this.list_0)
|
foreach (GridColumn gridColumn in this.list_0)
|
||||||
{
|
{
|
||||||
Class2 @class = this.dictionary_0[gridColumn.Name];
|
Class2 @class;
|
||||||
|
if (gridColumn == null ||
|
||||||
|
!this.dictionary_0.TryGetValue(gridColumn.Name, out @class) ||
|
||||||
|
@class == null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (@class.IsCountinuousCell())
|
if (@class.IsCountinuousCell())
|
||||||
{
|
{
|
||||||
GridViewInfo gridViewInfo = viewInfo as GridViewInfo;
|
|
||||||
GridColumnInfoArgs gridColumnInfoArgs = gridViewInfo.ColumnsInfo[gridColumn];
|
GridColumnInfoArgs gridColumnInfoArgs = gridViewInfo.ColumnsInfo[gridColumn];
|
||||||
if (gridColumnInfoArgs == null) return;
|
if (gridColumnInfoArgs == null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
int num = 0;
|
int num = 0;
|
||||||
int int_;
|
int int_;
|
||||||
if (@class.method_4())
|
if (@class.method_4())
|
||||||
@@ -82,10 +122,16 @@ public class AmountCellRender
|
|||||||
|
|
||||||
private void object_0_CustomDrawCell(object sender, RowCellCustomDrawEventArgs e)
|
private void object_0_CustomDrawCell(object sender, RowCellCustomDrawEventArgs e)
|
||||||
{
|
{
|
||||||
if (this.dictionary_0.ContainsKey(e.Column.Name))
|
if (this.disposed || e.Column == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Class2 @class;
|
||||||
|
if (this.dictionary_0.TryGetValue(e.Column.Name, out @class) &&
|
||||||
|
@class != null)
|
||||||
{
|
{
|
||||||
e.DisplayText = "";
|
e.DisplayText = "";
|
||||||
Class2 @class = this.dictionary_0[e.Column.Name];
|
|
||||||
Rectangle bounds = e.Bounds;
|
Rectangle bounds = e.Bounds;
|
||||||
Rectangle rectangle_ = bounds;
|
Rectangle rectangle_ = bounds;
|
||||||
Graphics graphics = e.Graphics;
|
Graphics graphics = e.Graphics;
|
||||||
@@ -98,14 +144,20 @@ public class AmountCellRender
|
|||||||
|
|
||||||
private void object_0_CustomDrawFooterCell(object sender, FooterCellCustomDrawEventArgs e)
|
private void object_0_CustomDrawFooterCell(object sender, FooterCellCustomDrawEventArgs e)
|
||||||
{
|
{
|
||||||
if (this.dictionary_0.ContainsKey(e.Column.Name))
|
if (this.disposed || e.Column == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Class2 @class;
|
||||||
|
if (this.dictionary_0.TryGetValue(e.Column.Name, out @class) &&
|
||||||
|
@class != null)
|
||||||
{
|
{
|
||||||
Class2 @class = this.dictionary_0[e.Column.Name];
|
|
||||||
if (@class.method_8())
|
if (@class.method_8())
|
||||||
{
|
{
|
||||||
e.Info.DisplayText = "";
|
e.Info.DisplayText = "";
|
||||||
Rectangle bounds = e.Bounds;
|
Rectangle bounds = e.Bounds;
|
||||||
@class.method_17(bounds, e.Graphics, e.Appearance.Font, e.Info.Value.ToString());
|
@class.method_17(bounds, e.Graphics, e.Appearance.Font, Convert.ToString(e.Info.Value));
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -113,13 +165,15 @@ public class AmountCellRender
|
|||||||
|
|
||||||
private void object_0_CustomDrawColumnHeader(object sender, ColumnHeaderCustomDrawEventArgs e)
|
private void object_0_CustomDrawColumnHeader(object sender, ColumnHeaderCustomDrawEventArgs e)
|
||||||
{
|
{
|
||||||
if (e.Column == null)
|
if (this.disposed || e.Column == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (this.dictionary_0.ContainsKey(e.Column.Name))
|
|
||||||
|
Class2 @class;
|
||||||
|
if (this.dictionary_0.TryGetValue(e.Column.Name, out @class) &&
|
||||||
|
@class != null)
|
||||||
{
|
{
|
||||||
Class2 @class = this.dictionary_0[e.Column.Name];
|
|
||||||
if (@class.method_6())
|
if (@class.method_6())
|
||||||
{
|
{
|
||||||
e.Column.Caption = "";
|
e.Column.Caption = "";
|
||||||
@@ -204,14 +258,44 @@ public class AmountCellRender
|
|||||||
|
|
||||||
public void RemoveAmountColumn(GridColumn gridColumn_0)
|
public void RemoveAmountColumn(GridColumn gridColumn_0)
|
||||||
{
|
{
|
||||||
if (this.dictionary_0.ContainsKey(gridColumn_0.Name))
|
if (gridColumn_0 != null && this.dictionary_0.ContainsKey(gridColumn_0.Name))
|
||||||
{
|
{
|
||||||
this.dictionary_0.Remove(gridColumn_0.Name);
|
this.dictionary_0.Remove(gridColumn_0.Name);
|
||||||
this.list_0.Remove(gridColumn_0);
|
this.list_0.Remove(gridColumn_0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
if (this.disposed)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.disposed = true;
|
||||||
|
GridView gridView = this.object_0;
|
||||||
|
GridControl gridControl = this.gridControl_0;
|
||||||
|
this.object_0 = null;
|
||||||
|
this.gridControl_0 = null;
|
||||||
|
|
||||||
|
if (gridView != null)
|
||||||
|
{
|
||||||
|
gridView.CustomDrawCell -= this.object_0_CustomDrawCell;
|
||||||
|
gridView.CustomDrawColumnHeader -= this.object_0_CustomDrawColumnHeader;
|
||||||
|
gridView.CustomDrawFooterCell -= this.object_0_CustomDrawFooterCell;
|
||||||
|
}
|
||||||
|
if (gridControl != null)
|
||||||
|
{
|
||||||
|
gridControl.Paint -= this.method_0;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.dictionary_0.Clear();
|
||||||
|
this.list_0.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
private GridView object_0;
|
private GridView object_0;
|
||||||
|
private GridControl gridControl_0;
|
||||||
|
private bool disposed;
|
||||||
|
|
||||||
private Color colorGray;
|
private Color colorGray;
|
||||||
private Color colorGreen;
|
private Color colorGreen;
|
||||||
|
|||||||
@@ -255,7 +255,10 @@ public class Class2
|
|||||||
if (color != Color.Empty)
|
if (color != Color.Empty)
|
||||||
{
|
{
|
||||||
Rectangle rect = new Rectangle(rectangle_0.Left + i - 2, int_2, int_1, int_3);
|
Rectangle rect = new Rectangle(rectangle_0.Left + i - 2, int_2, int_1, int_3);
|
||||||
graphics_0.FillRectangle(new SolidBrush(color), rect);
|
using (SolidBrush solidBrush = new SolidBrush(color))
|
||||||
|
{
|
||||||
|
graphics_0.FillRectangle(solidBrush, rect);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -265,9 +268,12 @@ public class Class2
|
|||||||
num++;
|
num++;
|
||||||
}
|
}
|
||||||
Rectangle rect2 = new Rectangle(rectangle_0.Left - 1, int_2, int_1 + 1, int_3);
|
Rectangle rect2 = new Rectangle(rectangle_0.Left - 1, int_2, int_1 + 1, int_3);
|
||||||
graphics_0.FillRectangle(new SolidBrush(Color.FromArgb(161, 157, 157)), rect2);
|
|
||||||
Rectangle rect3 = new Rectangle(rectangle_0.Left + rectangle_0.Width - 1, int_2, int_1 + 1, int_3);
|
Rectangle rect3 = new Rectangle(rectangle_0.Left + rectangle_0.Width - 1, int_2, int_1 + 1, int_3);
|
||||||
graphics_0.FillRectangle(new SolidBrush(Color.FromArgb(161, 157, 157)), rect3);
|
using (SolidBrush solidBrush = new SolidBrush(Color.FromArgb(161, 157, 157)))
|
||||||
|
{
|
||||||
|
graphics_0.FillRectangle(solidBrush, rect2);
|
||||||
|
graphics_0.FillRectangle(solidBrush, rect3);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Token: 0x06000028 RID: 40 RVA: 0x00002CC8 File Offset: 0x00000EC8
|
// Token: 0x06000028 RID: 40 RVA: 0x00002CC8 File Offset: 0x00000EC8
|
||||||
|
|||||||
+12
-2
@@ -13,9 +13,19 @@
|
|||||||
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
|
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
|
||||||
protected override void Dispose(bool disposing)
|
protected override void Dispose(bool disposing)
|
||||||
{
|
{
|
||||||
if (disposing && (components != null))
|
if (disposing)
|
||||||
{
|
{
|
||||||
components.Dispose();
|
if (cellHelper != null)
|
||||||
|
{
|
||||||
|
cellHelper.Dispose();
|
||||||
|
cellHelper = null;
|
||||||
|
}
|
||||||
|
class2_0 = null;
|
||||||
|
class2_1 = null;
|
||||||
|
if (components != null)
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
base.Dispose(disposing);
|
base.Dispose(disposing);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-229
@@ -13,7 +13,6 @@ using System.ComponentModel;
|
|||||||
using System.Data;
|
using System.Data;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using Lskj.Control;
|
using Lskj.Control;
|
||||||
using Lskj.Model;
|
using Lskj.Model;
|
||||||
@@ -24,7 +23,6 @@ using Lskj.Business.Impl;
|
|||||||
using Lskj.Business;
|
using Lskj.Business;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.IO;
|
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
namespace Lskj.Report
|
namespace Lskj.Report
|
||||||
@@ -42,8 +40,6 @@ namespace Lskj.Report
|
|||||||
mReportGridLocalizerViews =
|
mReportGridLocalizerViews =
|
||||||
new HashSet<DevExpress.XtraGrid.Views.Base.BaseView>();
|
new HashSet<DevExpress.XtraGrid.Views.Base.BaseView>();
|
||||||
private bool mReportGridResourcesReleased;
|
private bool mReportGridResourcesReleased;
|
||||||
private int mDisposedReportGridViewCount;
|
|
||||||
private int mRemovedGridLocalizerHandlerCount;
|
|
||||||
|
|
||||||
public FrmMain()
|
public FrmMain()
|
||||||
{
|
{
|
||||||
@@ -99,19 +95,12 @@ namespace Lskj.Report
|
|||||||
|
|
||||||
private void OnClose(object sender, FormClosingEventArgs e)
|
private void OnClose(object sender, FormClosingEventArgs e)
|
||||||
{
|
{
|
||||||
WriteReportLifecycleDiagnostics("closing-before-close-module");
|
|
||||||
this.mControl.CloseModule();
|
this.mControl.CloseModule();
|
||||||
WriteReportLifecycleDiagnostics("closing-after-close-module");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnFrmMainDisposed(object sender, EventArgs e)
|
private void OnFrmMainDisposed(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
DisposeReportGridViews();
|
DisposeReportGridViews();
|
||||||
WriteReportLifecycleDiagnostics(
|
|
||||||
"disposed-event;disposedGridViews=" +
|
|
||||||
mDisposedReportGridViewCount +
|
|
||||||
";gridLocalizerRemoved=" +
|
|
||||||
mRemovedGridLocalizerHandlerCount);
|
|
||||||
mReportGridLocalizerViews.Clear();
|
mReportGridLocalizerViews.Clear();
|
||||||
mPreexistingGridLocalizerViews.Clear();
|
mPreexistingGridLocalizerViews.Clear();
|
||||||
this.FormClosing -= OnClose;
|
this.FormClosing -= OnClose;
|
||||||
@@ -142,7 +131,6 @@ namespace Lskj.Report
|
|||||||
}
|
}
|
||||||
|
|
||||||
mReportGridResourcesReleased = true;
|
mReportGridResourcesReleased = true;
|
||||||
WriteReportLifecycleDiagnostics("dispose-before-gridviews");
|
|
||||||
CaptureReportGridLocalizerViews();
|
CaptureReportGridLocalizerViews();
|
||||||
if (this.mControl != null)
|
if (this.mControl != null)
|
||||||
{
|
{
|
||||||
@@ -151,8 +139,6 @@ namespace Lskj.Report
|
|||||||
|
|
||||||
HashSet<DevExpress.XtraGrid.Views.Base.BaseView> disposedViews =
|
HashSet<DevExpress.XtraGrid.Views.Base.BaseView> disposedViews =
|
||||||
new HashSet<DevExpress.XtraGrid.Views.Base.BaseView>();
|
new HashSet<DevExpress.XtraGrid.Views.Base.BaseView>();
|
||||||
int disposeErrorCount = 0;
|
|
||||||
int detachedDataSourceCount = 0;
|
|
||||||
foreach (System.Windows.Forms.Control control in
|
foreach (System.Windows.Forms.Control control in
|
||||||
EnumerateControls(this.mControl))
|
EnumerateControls(this.mControl))
|
||||||
{
|
{
|
||||||
@@ -165,12 +151,10 @@ namespace Lskj.Report
|
|||||||
if (gridControl.DataSource != null)
|
if (gridControl.DataSource != null)
|
||||||
{
|
{
|
||||||
gridControl.DataSource = null;
|
gridControl.DataSource = null;
|
||||||
detachedDataSourceCount++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
disposeErrorCount++;
|
|
||||||
LogHelper.Instance.WriteError(ex, ResourceKeys.BaseReport);
|
LogHelper.Instance.WriteError(ex, ResourceKeys.BaseReport);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,7 +175,6 @@ namespace Lskj.Report
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
disposeErrorCount++;
|
|
||||||
LogHelper.Instance.WriteError(ex, ResourceKeys.BaseReport);
|
LogHelper.Instance.WriteError(ex, ResourceKeys.BaseReport);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -216,33 +199,16 @@ namespace Lskj.Report
|
|||||||
dataSourceProperty.GetValue(control, null) != null)
|
dataSourceProperty.GetValue(control, null) != null)
|
||||||
{
|
{
|
||||||
dataSourceProperty.SetValue(control, null, null);
|
dataSourceProperty.SetValue(control, null, null);
|
||||||
detachedDataSourceCount++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
disposeErrorCount++;
|
|
||||||
LogHelper.Instance.WriteError(ex, ResourceKeys.BaseReport);
|
LogHelper.Instance.WriteError(ex, ResourceKeys.BaseReport);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int trackedGridViews = mReportGridLocalizerViews.Count;
|
ReleaseTrackedGridLocalizerViews(disposedViews);
|
||||||
int removedGridLocalizerHandlers =
|
|
||||||
ReleaseTrackedGridLocalizerViews(disposedViews);
|
|
||||||
mDisposedReportGridViewCount = disposedViews.Count;
|
|
||||||
mRemovedGridLocalizerHandlerCount = removedGridLocalizerHandlers;
|
|
||||||
WriteReportLifecycleDiagnostics(
|
|
||||||
"dispose-after-gridviews;dispose-attempts=" +
|
|
||||||
disposedViews.Count +
|
|
||||||
";dispose-errors=" +
|
|
||||||
disposeErrorCount +
|
|
||||||
";detachedDataSources=" +
|
|
||||||
detachedDataSourceCount +
|
|
||||||
";trackedGridViews=" +
|
|
||||||
trackedGridViews +
|
|
||||||
";gridLocalizerRemoved=" +
|
|
||||||
removedGridLocalizerHandlers);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CaptureReportGridLocalizerViews()
|
private void CaptureReportGridLocalizerViews()
|
||||||
@@ -454,200 +420,6 @@ namespace Lskj.Report
|
|||||||
handler.Target is DevExpress.XtraGrid.Views.Base.BaseView;
|
handler.Target is DevExpress.XtraGrid.Views.Base.BaseView;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void WriteReportLifecycleDiagnostics(string phase)
|
|
||||||
{
|
|
||||||
if (!IsReportDiagnosticsEnabled())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
LogHelper.Instance.WriteLog(
|
|
||||||
"REPORT_DIAGNOSTIC phase=" +
|
|
||||||
(phase ?? string.Empty) +
|
|
||||||
" " +
|
|
||||||
GetReportGridDiagnostics(),
|
|
||||||
"ResourceDiagnostics.Report");
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
// Diagnostics must never interfere with module close/dispose.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private string GetReportGridDiagnostics()
|
|
||||||
{
|
|
||||||
int controlCount = 0;
|
|
||||||
int gridControlCount = 0;
|
|
||||||
int viewCount = 0;
|
|
||||||
HashSet<DevExpress.XtraGrid.Views.Base.BaseView> views =
|
|
||||||
new HashSet<DevExpress.XtraGrid.Views.Base.BaseView>();
|
|
||||||
StringBuilder viewDetails = new StringBuilder();
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (this.mControl != null)
|
|
||||||
{
|
|
||||||
foreach (System.Windows.Forms.Control control in EnumerateControls(this.mControl))
|
|
||||||
{
|
|
||||||
controlCount++;
|
|
||||||
DevExpress.XtraGrid.GridControl gridControl =
|
|
||||||
control as DevExpress.XtraGrid.GridControl;
|
|
||||||
if (gridControl == null)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
gridControlCount++;
|
|
||||||
foreach (DevExpress.XtraGrid.Views.Base.BaseView view in
|
|
||||||
gridControl.ViewCollection.Cast<DevExpress.XtraGrid.Views.Base.BaseView>())
|
|
||||||
{
|
|
||||||
if (view == null || !views.Add(view))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
viewCount++;
|
|
||||||
if (viewDetails.Length < 1800)
|
|
||||||
{
|
|
||||||
if (viewDetails.Length > 0)
|
|
||||||
{
|
|
||||||
viewDetails.Append(",");
|
|
||||||
}
|
|
||||||
|
|
||||||
viewDetails.Append(SafeViewDescription(view));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception exception)
|
|
||||||
{
|
|
||||||
viewDetails.Append(",enumeration-error=");
|
|
||||||
viewDetails.Append(exception.GetType().Name);
|
|
||||||
}
|
|
||||||
|
|
||||||
return "formDisposed=" +
|
|
||||||
this.IsDisposed +
|
|
||||||
";controlCount=" +
|
|
||||||
controlCount +
|
|
||||||
";gridControlCount=" +
|
|
||||||
gridControlCount +
|
|
||||||
";viewCount=" +
|
|
||||||
viewCount +
|
|
||||||
";views=" +
|
|
||||||
viewDetails +
|
|
||||||
";gridLocalizer=" +
|
|
||||||
DescribeGridLocalizer();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static string SafeViewDescription(
|
|
||||||
DevExpress.XtraGrid.Views.Base.BaseView view)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return view.GetType().FullName +
|
|
||||||
":" +
|
|
||||||
(view.Name ?? string.Empty).Replace(";", ",");
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
return "<view-description-error>";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static string DescribeGridLocalizer()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var active =
|
|
||||||
DevExpress.XtraGrid.Localization.GridLocalizer.Active;
|
|
||||||
if (active == null)
|
|
||||||
{
|
|
||||||
return "active=null";
|
|
||||||
}
|
|
||||||
|
|
||||||
StringBuilder handlers = new StringBuilder();
|
|
||||||
int handlerCount = 0;
|
|
||||||
Type currentType = active.GetType();
|
|
||||||
while (currentType != null && currentType != typeof(object))
|
|
||||||
{
|
|
||||||
FieldInfo[] fields = currentType.GetFields(
|
|
||||||
BindingFlags.Instance |
|
|
||||||
BindingFlags.Static |
|
|
||||||
BindingFlags.Public |
|
|
||||||
BindingFlags.NonPublic |
|
|
||||||
BindingFlags.DeclaredOnly);
|
|
||||||
foreach (FieldInfo field in fields)
|
|
||||||
{
|
|
||||||
if (!typeof(Delegate).IsAssignableFrom(field.FieldType))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
object owner = field.IsStatic ? null : (object)active;
|
|
||||||
Delegate value = field.GetValue(owner) as Delegate;
|
|
||||||
if (value == null)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (Delegate handler in value.GetInvocationList())
|
|
||||||
{
|
|
||||||
handlerCount++;
|
|
||||||
if (handlers.Length < 1800)
|
|
||||||
{
|
|
||||||
if (handlers.Length > 0)
|
|
||||||
{
|
|
||||||
handlers.Append(",");
|
|
||||||
}
|
|
||||||
|
|
||||||
string targetType = handler.Target == null
|
|
||||||
? "static"
|
|
||||||
: handler.Target.GetType().FullName;
|
|
||||||
handlers.Append(field.Name.Replace(";", ","));
|
|
||||||
handlers.Append("->");
|
|
||||||
handlers.Append(targetType.Replace(";", ","));
|
|
||||||
handlers.Append(".");
|
|
||||||
handlers.Append(handler.Method.Name.Replace(";", ","));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
currentType = currentType.BaseType;
|
|
||||||
}
|
|
||||||
|
|
||||||
return "activeType=" +
|
|
||||||
active.GetType().FullName.Replace(";", ",") +
|
|
||||||
";handlerCount=" +
|
|
||||||
handlerCount +
|
|
||||||
";handlers=" +
|
|
||||||
handlers;
|
|
||||||
}
|
|
||||||
catch (Exception exception)
|
|
||||||
{
|
|
||||||
return "localizer-error=" + exception.GetType().Name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static bool IsReportDiagnosticsEnabled()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return File.Exists(
|
|
||||||
Path.Combine(
|
|
||||||
AppDomain.CurrentDomain.BaseDirectory,
|
|
||||||
"Logs",
|
|
||||||
"ResourceDiagnostics",
|
|
||||||
"resource-diagnostics.enabled"));
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static IEnumerable<System.Windows.Forms.Control> EnumerateControls(
|
private static IEnumerable<System.Windows.Forms.Control> EnumerateControls(
|
||||||
System.Windows.Forms.Control root)
|
System.Windows.Forms.Control root)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user