using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace LYFZ.ComponentLibrary { /// <summary> /// 所有内容窗体的基窗体 /// </summary> public partial class BaseContentsFormMain : BaseFormRelease, LYFZ.StandardInterface.IFormMain { UCNavigationTool currentUcNavigationTool = new UCNavigationTool(); public BaseContentsFormMain() { InitializeComponent(); // this.ctlScrollBarH.Scroll += new EventHandler(ctlScrollBarH_Scroll); // this.ctlScrollBarV.Scroll += new EventHandler(ctlScrollBarV_Scroll); this.plExMainContainer.Resize += new EventHandler(plExMainContainer_Resize); this.plFormMainContent.Resize += new EventHandler(plFormMainContent_Resize); this.plExMainContainer.MouseMove += plExMainContainer_MouseMove; this.plExMainContainer.Click += plExMainContainer_Click; this.Resize += new EventHandler(BaseContentsFormRelease_Resize); this.Shown += new EventHandler(BaseContentsFormRelease_Shown); this.isOverrideOnPaint = true; IsCustomScrollBar = false; this.plExMainContainer.MouseWheel += new MouseEventHandler(plExMainContainer_MouseWheel); // this.ctlScrollBarV.MouseWheel += new MouseEventHandler(ctlScrollBarV_MouseWheel); this.plExMainContainer.BackColor = LYFZ.ComponentLibrary.GetUIResources.FrmContentBackgroundColor; this.FormClosing += BaseContentsFormMain_FormClosing; this.FormClosed += BaseContentsFormMain_FormClosed; //this.ctlScrollBarV.MouseEnter += ctlScrollBarV_MouseEnter; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; } bool isShowWelcomeForm = true; public void ClosThisForm() { isShowWelcomeForm = false; this.Close(); } /// <summary> /// 等待释放的控件集合 /// </summary> static List<Form> WaitDisposeAllControls = new List<Form>(); void BaseContentsFormMain_FormClosed(object sender, FormClosedEventArgs e) { /* try { // this.SuspendLayout(); // ControlsDispose(this.Controls); } catch { }*/ // } public static void ControlsDispose(System.Windows.Forms.Control.ControlCollection controls) { int count = controls.Count; if (count > 0) { List<System.Windows.Forms.Control> delList = new List<Control>(); for (int i = 0; i < count; i++) { System.Windows.Forms.Control control = controls[i]; /* if (control.Controls.Count > 0) { ControlsDispose(control.Controls); }*/ if (control.GetType() == typeof(System.Windows.Forms.Panel) || control.GetType() == typeof(System.Windows.Forms.Label) || control.GetType() == typeof(LYFZ.ComponentLibrary.PanelEx) || control.GetType() == typeof(LYFZ.ComponentLibrary.LabelEx) || control.GetType() == typeof(LYFZ.ComponentLibrary.CheckBoxEx) || control.GetType() == typeof(System.Windows.Forms.CheckBox)) { if (control != null && !control.IsDisposed) { delList.Add(control); } } } count = delList.Count; for (int i = 0; i < count; i++) { delList[i].Dispose(); } delList.Clear(); delList = null; } } void ctlScrollBarV_MouseEnter(object sender, EventArgs e) { RefreshCtlScrollBarValue(); } /// <summary> /// 刷新滚动条值 /// </summary> void RefreshCtlScrollBarValue() { // this.ctlScrollBarV.Value = Math.Abs(this.plExMainContainer.AutoScrollPosition.Y); // this.ctlScrollBarH.Value = Math.Abs(this.plExMainContainer.AutoScrollPosition.X); // scrollY = ctlScrollBarV.Value; // scrollX = ctlScrollBarH.Value; } void plExMainContainer_Click(object sender, EventArgs e) { this.plExMainContainer.Focus(); } void plExMainContainer_MouseMove(object sender, MouseEventArgs e) { RefreshCtlScrollBarValue(); } bool isClosedLoadWelcomeForm = true; public bool IsClosedLoadWelcomeForm { get { return isClosedLoadWelcomeForm; } set { isClosedLoadWelcomeForm = value; } } void BaseContentsFormMain_FormClosing(object sender, FormClosingEventArgs e) { //typeof(LYFZ.StandardInterface.IToolMenuClick).IsAssignableFrom(this.ParentForm.GetType()) //用于判断父窗体是否实现了指定的LYFZ.StandardInterface.IToolMenuClick接口 try { if (this.GetType().FullName != "LYFZ.Software.PhotoStudio.frmWelcomeForm" && isShowWelcomeForm) { if (typeof(LYFZ.StandardInterface.IToolMenuClick).IsAssignableFrom(this.ParentForm.GetType())) { LYFZ.StandardInterface.IToolMenuClick iParentForm = (LYFZ.StandardInterface.IToolMenuClick)this.ParentForm; iParentForm.ShowForm("LYFZ.Software.PhotoStudio.frmWelcomeForm", "SPS", "ShowEmbedded"); } } } catch { } finally { isShowWelcomeForm = true; } } void InitializeUcNavigationTool() { if (isShowUcNavigationTool) { if (this.plFormMainContent.Controls.Find("currentUcNavigationTool01", false).Length <= 0) { currentUcNavigationTool.Width = this.plFormMainContent.Width; currentUcNavigationTool.Visible = this.isShowUcNavigationTool; currentUcNavigationTool.Location = new Point(0, 0); currentUcNavigationTool.Name = "currentUcNavigationTool01"; this.plFormMainContent.Controls.Add(currentUcNavigationTool); } } else { try { this.plFormMainContent.Controls.Remove(currentUcNavigationTool); } catch { } } } void SetUcNavigationTool() { if (this.isShowUcNavigationTool) { currentUcNavigationTool.Width = this.plFormMainContent.Width; this.plExMainContainer.Location = new Point(0, 40); } else { this.plExMainContainer.Location = new Point(0, 0); } } /// <summary> /// 设置导航 /// </summary> public UCNavigationTool UcNavigationTool { get { return this.currentUcNavigationTool; } } bool isShowUcNavigationTool = false; /// <summary> /// 是否显示导航栏 /// </summary> public bool IsShowUcNavigationTool { get { return isShowUcNavigationTool; } set { isShowUcNavigationTool = value; InitializeUcNavigationTool(); plFormMainContent_Resize(null,null); Invalidate(false); } } /// <summary> /// 重载新窗体 /// </summary> /// <param name="objNewForm"></param> public void ReloadNewForm(object objNewForm) { LYFZ.ComponentLibrary.BaseContentsFormMain frm = (LYFZ.ComponentLibrary.BaseContentsFormMain)objNewForm; frm.TopLevel = this.TopLevel; frm.IsShadow = this.IsShadow; frm.MaximizeBox = this.MaximizeBox; frm.MinimizeBox = this.MinimizeBox; frm.IsShowCloseBox = this.IsShowCloseBox; frm.TitleBgImageHeight = this.TitleBgImageHeight; frm.BottomBgImageHeight = this.BottomBgImageHeight; frm.IsMaximized = this.IsMaximized; frm.FormMobile = this.FormMobile; frm.IsUserControlsSize = this.IsUserControlsSize; frm.Dock = this.Dock; frm.IsCustomScrollBar = this.IsCustomScrollBar; frm.Parent = this.Parent; frm.IsShowBtnFormMenu = this.IsShowBtnFormMenu; frm.IsShowBtnFormSkin = this.IsShowBtnFormMenu; frm.IsCloseForm = this.IsCloseForm; frm.IsMinimize = this.IsMinimize; if (!frm.IsMaximized && !frm.IsMinimize && !frm.IsCloseForm) { frm.SetCoverageTitleButtonEvent(); } frm.Show(); this.Close(); this.Dispose(); } /// <summary> /// 设置发生错误时显示信息 /// </summary> /// <param name="msg"></param> public void SetError(string msg) { LabelEx tryLabMsg = new LabelEx(); tryLabMsg.Text = msg; tryLabMsg.ForeColor =Color.Red; tryLabMsg.Font = new System.Drawing.Font("宋体", 12); tryLabMsg.Padding = new Padding(10); tryLabMsg.Dock = DockStyle.Fill; this.plExMainContainer.Controls.Add(tryLabMsg); } /// <summary> /// 公共plExMainContainer对象 /// </summary> // public LYFZ.ComponentLibrary.PanelEx PublicContainer = null; /// <summary> /// 系统菜单事件接口 /// </summary> public LYFZ.StandardInterface.IMenuClick iMenuClick = null; /// <summary> /// 系统菜单事件设置 /// </summary> /// <param name="menuItem"></param> protected override void SetMenuItem_Click(ToolStripMenuItem menuItem) { if (iMenuClick != null) iMenuClick.SetIMenuItem_Click(menuItem); } /// <summary> /// 覆盖窗体标题栏上最小化、最大化和关闭按钮的事件 /// </summary> public void SetCoverageTitleButtonEvent() { this.btnAppFormExit.Click += new EventHandler(ParentFormBtnAppFormExit_Click); this.btnAppFormMaximize.Click += new EventHandler(ParentFormBtnAppFormMaximize_Click); this.btnAppFormMinimize.Click += new EventHandler(ParentFormBtnAppFormMinimize_Click); isCoverageTitleButtonEvent = true; } bool isCoverageTitleButtonEvent = false; protected override void btnAppFormMaximize_Move(object sender, EventArgs e) { if (isCoverageTitleButtonEvent) { this.SetFormMzximizeBtn(this.ParentForm.WindowState); } else { base.btnAppFormMaximize_Move(sender, e); } } /// <summary> /// 最小化父窗体 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected virtual void ParentFormBtnAppFormMinimize_Click(object sender, EventArgs e) { this.ParentForm.WindowState = FormWindowState.Minimized; } /// <summary> /// 最大化父窗体 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected virtual void ParentFormBtnAppFormMaximize_Click(object sender, EventArgs e) { if (this.ParentForm.WindowState == FormWindowState.Normal) { this.ParentForm.WindowState = FormWindowState.Maximized; } else { this.ParentForm.WindowState = FormWindowState.Normal; } } /// <summary> /// 关闭父窗体 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected virtual void ParentFormBtnAppFormExit_Click(object sender, EventArgs e) { this.ParentForm.Close(); } #region 滚动轮滚动时滚动窗体 /// <summary> /// 获取滚动轮滚动的值 /// </summary> /// <param name="e"></param> /// <returns></returns> int getMouseWheelDelta(MouseEventArgs e) { // this.Text = this.ctlScrollBarV.Maximum + "/" + this.ctlScrollBarV.LargeChange.ToString() + "*" + ctlScrollBarV.Value; //e.Delta 在正负 120 之间 //滚动条要滚动的值在 0 到 this.ctlScrollBarV.Maximum - this.ctlScrollBarV.LargeChange 之间 int tempDelta = -(e.Delta); // if (tempDelta < this.ctlScrollBarV.Minimum) // { // tempDelta = this.ctlScrollBarV.Minimum; // } //int tempDifference = this.ctlScrollBarV.Maximum - this.ctlScrollBarV.LargeChange; // int tempScrollBar = tempDifference / 120; /* if (tempScrollBar <= 0) { tempScrollBar = 1; } if (tempDelta == 120) { tempDelta = tempDifference; } else { tempDelta = tempDelta * tempScrollBar; if (tempDelta > tempDifference) { tempDelta = tempDifference; } }*/ return tempDelta; } void ctlScrollBarV_MouseWheel(object sender, MouseEventArgs e) { //this.ctlScrollBarV.Value = getMouseWheelDelta(e); //垂直滚动 // scrollY = ctlScrollBarV.Value; // this.plExMainContainer.AutoScrollPosition = new Point(scrollX, ctlScrollBarV.Value); } void plExMainContainer_MouseWheel(object sender, MouseEventArgs e) { // this.ctlScrollBarV.Value = getMouseWheelDelta(e); //垂直滚动 // scrollY = ctlScrollBarV.Value; } #endregion /// <summary> /// 记录滚动条显示时需要的宽度 /// </summary> int PanlOffset = 0; /// <summary> /// 首次显示时 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void BaseContentsFormRelease_Shown(object sender, EventArgs e) { if (IsCustomScrollBar) { PanlOffset = 20; } InitializeUcNavigationTool(); ResetControls(); SetUcNavigationTool(); } /// <summary> /// 窗体大小变化时 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void BaseContentsFormRelease_Resize(object sender, EventArgs e) { isSetplExMainContainerFocus = true; ResetControls(); } /// <summary> /// 父panl大小变化时 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void plFormMainContent_Resize(object sender, EventArgs e) { isSetplExMainContainerFocus = true; ResetControls(); SetUcNavigationTool(); } /// <summary> /// 子panl大小变化时 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void plExMainContainer_Resize(object sender, EventArgs e) { if (!this.TopLevel) { ResetControls(); } isSetplExMainContainerFocus = true; } /// <summary> /// 重设相关控件 /// </summary> void ResetControls() { SetplExMainContainerSize(PanlOffset); SetScrollBarAttr(); InitializeScrollBar(); } /// <summary> /// 重绘控件 /// </summary> /// <param name="e"></param> protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { base.OnPaint(e); SetplExMainContainerSize(PanlOffset); } /// <summary> /// 设置内容容器的大小和位置 /// </summary> public void SetplExMainContainerSize(int offset = 0) { //父panl大小和位置 this.plFormMainContent.Location = new Point(0, this.TitleBgImageHeight); //子panl大小和位置 // isShowCtlScrollBarH = this.plExMainContainer.HorizontalScroll.Visible; //isShowCtlScrollBarV = this.plExMainContainer.VerticalScroll.Visible; //导航工具栏高度 int UcNavigationToolHeight = 0; if (this.isShowUcNavigationTool) { UcNavigationToolHeight = this.currentUcNavigationTool.Height; } this.plFormMainContent.Width = this.Width; this.plFormMainContent.Height = this.Height - this.TitleBgImageHeight - this.BottomBgImageHeight; this.plExMainContainer.Width = this.plFormMainContent.Width; this.plExMainContainer.Height = this.plFormMainContent.Height - UcNavigationToolHeight; } /// <summary> /// 初始化滚动条 /// </summary> public void InitializeScrollBar() { // this.plExMainContainer.AutoScrollPosition = new Point(scrollX, scrollY); /* this.ctlScrollBarV.Minimum = 0; this.ctlScrollBarV.Maximum = this.plExMainContainer.DisplayRectangle.Height; this.ctlScrollBarV.LargeChange = ctlScrollBarV.Maximum / ctlScrollBarV.Height + this.plExMainContainer.Height - 20; this.ctlScrollBarV.Value = Math.Abs(this.plExMainContainer.AutoScrollPosition.Y); this.ctlScrollBarH.Minimum = 0; this.ctlScrollBarH.Maximum = this.plExMainContainer.DisplayRectangle.Width; this.ctlScrollBarH.LargeChange = ctlScrollBarH.Maximum / ctlScrollBarH.Width + this.plExMainContainer.Width - 20; this.ctlScrollBarH.Value = Math.Abs(this.plExMainContainer.AutoScrollPosition.X);*/ } /// <summary> /// 设置滚动条属性 /// </summary> void SetScrollBarAttr() { if (IsCustomScrollBar) { // this.ctlScrollBarV.Location = new Point(this.plFormMainContent.Width, this.plFormMainContent.Location.Y); // this.ctlScrollBarH.Location = new Point(0, this.plFormMainContent.Location.Y + this.plFormMainContent.Height); // this.ctlScrollBarV.Size = new Size(this.ctlScrollBarV.Width, this.plFormMainContent.Height); // this.ctlScrollBarH.Size = new Size(this.plFormMainContent.Width, this.ctlScrollBarH.Height); // scrollX = this.ctlScrollBarH.Value; // scrollY = this.ctlScrollBarV.Value; } } bool isCustomScrollBar = false; /// <summary> /// 设置是否使用自定义滚动条 /// </summary> [Browsable(false), Category("自定义窗体属性"), Description("设置是否使用自定义滚动条")] public bool IsCustomScrollBar { get { return isCustomScrollBar; } set { isCustomScrollBar = false; } } private bool isSetplExMainContainerFocus = true; bool isMouseEnterSetFocus = false; /// <summary> /// 是否鼠标进入窗体内容框时自动获取焦点 /// </summary> [Browsable(false), Category("自定义窗体属性"), Description("是否鼠标进入窗体内容框时自动获取焦点")] public bool IsMouseEnterSetFocus { get { return isMouseEnterSetFocus; } set { isMouseEnterSetFocus = value; } } private void plExMainContainer_MouseEnter(object sender, EventArgs e) { if (IsMouseEnterSetFocus) { if (isSetplExMainContainerFocus) this.plExMainContainer.Focus(); isSetplExMainContainerFocus = false; } } protected override void CreateHandle() { if (!IsHandleCreated) { try { base.CreateHandle(); } catch { } finally { if (!IsHandleCreated) { base.RecreateHandle(); } } } } } }