/*******************************************************************************
* Copyright(c) 2014 DongkeSoft All rights reserved. / Confidential
* 类的信息:
* 1.程序名称:DockPanelBase.cs
* 2.功能描述:类文件
* 编辑履历:
* 作者 日期 版本 修改内容
* 陈晓野 2014/09/01 1.00 新建
*******************************************************************************/
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Windows.Forms;
using Dongke.IBOSS.PRD.Basics.BaseControls;
using Dongke.IBOSS.PRD.Basics.Library;
namespace Dongke.IBOSS.PRD.Basics.DockPanel
{
#region 异步处理的委托
///
/// 异步处理
///
///
public delegate object AsyncMethod();
#endregion
public partial class DockPanelBase : DockContent
{
#region 成员变量
private bool _canClosing = true;
private DataSet _dataSource = null;
private ContextMenuStrip cmsMenu;
private ToolStripMenuItem tsmiClose;
private ToolStripMenuItem tsmiCloseAll;
private ToolStripMenuItem tsmiCloseAllExcept;
private IContainer components = null;
#endregion
#region 属性
///
/// 窗体的数据源的取得和设定
///
[Browsable(true)]
[DefaultValue(null)]
[Description("窗体的数据源的取得和设定。")]
public DataSet DataSource
{
get
{
return _dataSource;
}
set
{
_dataSource = value;
}
}
#endregion
#region 构造函数
///
/// 构造函数
///
public DockPanelBase()
{
InitializeComponent();
this.Font = ControlsConst.FONT_SYSTEM_DEFAULT;
this.TabPageContextMenuStrip = cmsMenu;
this.BackgroundImage = ResourceBackGroundImage.bg;
}
#endregion
#region 事件
///
/// 关闭事件
///
///
///
private void DockPanelBase_FormClosing(object sender, FormClosingEventArgs e)
{
if (!this._canClosing)
{
e.Cancel = true;
}
}
#region 重写方法或者函数
///
/// 重写Form的OnLoad事件
///
///
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
//datagridview控件设置保存
Control[] controls = this.GetControls(this, typeof(C_DataGridView));
foreach (C_DataGridView dgv in controls)
{
if (dgv.IsSaveDataGridViewSetting)
{
GridSettingManager.InitializeGridSetting(dgv, this.Name + dgv.Name);
}
}
}
///
/// 重写Form的OnFormClosing事件
///
///
protected override void OnFormClosing(FormClosingEventArgs e)
{
if (!this._canClosing)
{
e.Cancel = true;
return;
}
base.OnFormClosing(e);
}
///
/// 重写Form的OnFormClosed事件
///
///
protected override void OnFormClosed(FormClosedEventArgs e)
{
// datagridview控件设置保存(TODO)
Control[] items = this.GetControls(this, typeof(C_DataGridView));
foreach (C_DataGridView grd in items)
{
if (grd.IsSaveDataGridViewSetting)
{
GridSettingManager.SaveGridSetting(grd, this.Name + grd.Name);
}
}
base.OnFormClosed(e);
// 内存回收 241224
GC.Collect();
GC.WaitForPendingFinalizers();
}
///
/// 取得所有控件
///
/// 控件类型
/// 控件类型
/// 所有控件
public Control[] GetControls(Control topControl, Type type)
{
if (topControl == null)
{
return GetControls(this, type);
}
ArrayList list = new ArrayList();
foreach (Control control in topControl.Controls)
{
if (type == null || type.Equals(control.GetType()))
{
list.Add(control);
}
list.AddRange(GetControls(control, type));
}
return (Control[])list.ToArray(typeof(Control));
}
#endregion
#endregion
#region 程序异步处理
///
/// 窗体的异步处理
///
/// 异步方法
///
public object DoAsync(AsyncMethod method)
{
object result = null;
try
{
StartProgress();
IAsyncResult asyncResult = method.BeginInvoke(null, null);
while (!asyncResult.IsCompleted)
{
Application.DoEvents();
System.Threading.Thread.Sleep(1);
}
result = method.EndInvoke(asyncResult);
}
finally
{
EndProgress();
}
return result;
}
///
/// 开始异步处理
///
public virtual void StartProgress()
{
this._canClosing = false;
BeginAsyncControls(this);
}
public virtual void BeginAsyncControls(Control control)
{
if (control == null)
{
return;
}
if (control is IDKControl)
{
(control as IDKControl).BeginAsync();
return;
}
else
{
if (control is ToolStrip)
{
control.Enabled = false;
return;
}
if (control.Controls == null || control.Controls.Count == 0)
{
//control.Enabled = false;
return;
}
foreach (Control item in control.Controls)
{
BeginAsyncControls(item);
}
}
}
///
/// 结束异步处理
///
public virtual void EndProgress()
{
this._canClosing = true;
EndAsyncControls(this);
}
public virtual void EndAsyncControls(Control control)
{
if (control == null)
{
return;
}
if (control is IDKControl)
{
(control as IDKControl).EndAsync();
return;
}
else
{
if (control is ToolStrip)
{
control.Enabled = true;
return;
}
if (control.Controls == null || control.Controls.Count == 0)
{
//control.Enabled = false;
return;
}
foreach (Control item in control.Controls)
{
EndAsyncControls(item);
}
}
}
#endregion
#region 私有方法/函数
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DockPanelBase));
this.cmsMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
this.tsmiClose = new System.Windows.Forms.ToolStripMenuItem();
this.tsmiCloseAllExcept = new System.Windows.Forms.ToolStripMenuItem();
this.tsmiCloseAll = new System.Windows.Forms.ToolStripMenuItem();
this.cmsMenu.SuspendLayout();
this.SuspendLayout();
//
// cmsMenu
//
this.cmsMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsmiClose,
this.tsmiCloseAllExcept,
this.tsmiCloseAll});
this.cmsMenu.Name = "cmsMenu";
this.cmsMenu.ShowImageMargin = false;
this.cmsMenu.Size = new System.Drawing.Size(163, 70);
//
// tsmiClose
//
this.tsmiClose.Name = "tsmiClose";
this.tsmiClose.Size = new System.Drawing.Size(162, 22);
this.tsmiClose.Text = "关闭(&X)";
this.tsmiClose.Click += new System.EventHandler(this.tsmiClose_Click);
//
// tsmiCloseAllExcept
//
this.tsmiCloseAllExcept.Name = "tsmiCloseAllExcept";
this.tsmiCloseAllExcept.Size = new System.Drawing.Size(162, 22);
this.tsmiCloseAllExcept.Text = "除此之外全部关闭(&E)";
this.tsmiCloseAllExcept.Click += new System.EventHandler(this.tsmiCloseAllExcept_Click);
//
// tsmiCloseAll
//
this.tsmiCloseAll.Name = "tsmiCloseAll";
this.tsmiCloseAll.Size = new System.Drawing.Size(162, 22);
this.tsmiCloseAll.Text = "全部关闭(&A)";
this.tsmiCloseAll.Click += new System.EventHandler(this.tsmiCloseAll_Click);
//
// DockPanelBase
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoScroll = true;
this.ClientSize = new System.Drawing.Size(284, 262);
this.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "DockPanelBase";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.DockPanelBase_FormClosing);
this.cmsMenu.ResumeLayout(false);
this.ResumeLayout(false);
}
private void tsmiClose_Click(object sender, EventArgs e)
{
this.Close();
}
private void tsmiCloseAllExcept_Click(object sender, EventArgs e)
{
IDockContent[] documents = DockPanel.DocumentsToArray();
foreach (IDockContent content in documents)
{
if (!content.Equals(this))
{
content.DockHandler.Close();
}
}
}
private void tsmiCloseAll_Click(object sender, EventArgs e)
{
IDockContent[] documents = DockPanel.DocumentsToArray();
foreach (IDockContent content in documents)
{
content.DockHandler.Close();
}
}
///
/// 显示对应的页面中主窗体中
///
/// 需要停靠的DockPanelBase
public void ShowInDockPanel(DockPanel dockPanel)
{
try
{
this.Show(dockPanel, DockState.Document);
this.Activate();
}
catch (Exception ex)
{
throw ex;
}
}
#endregion
}
}