/// <summary> /// ShowArchiveDetailForm /// </summary> /// <param name="detailForm"></param> public void ShowArchiveDetailForm() { IArchiveDetailForm detailForm = this.ArchiveDetailForm; Form form = detailForm as Form; if (form == null) { return; } // 需要变换DetailForm状态 //if (form.Visible) //{ // return; //} //TabbedMdiForm mdiForm = TabbedMdiForm.GetMainForm(); //if (mdiForm != null) { form.Text = this.Text + "_详细"; //// show in mdi //mdiForm.AddFormToGroup(form, 1); //form.InvisibleOnClosing = true; form.FormBorderStyle = FormBorderStyle.None; form.TopLevel = false; form.Dock = DockStyle.Fill; this.splitContainer1.Panel2.Controls.Add(form); // 如果是最大化,里面的控件不能随着Panel2大小改变而改变 //form.WindowState = FormWindowState.Maximized; // 在还没Show之前,SplitterDistance是按照原大小来的,此时改变窗体大小,SplitterDistance会按比例改变。 // 所以应该先改变大小,再读入SplitterDistance form.Size = new Size(this.Width, this.Height - this.splitContainer1.SplitterDistance); this.splitContainer1.Panel2Collapsed = false; if (detailForm.MenuStrip != null) { detailForm.MenuStrip.Visible = false; } } //else //{ // form.TopLevel = true; //} form.VisibleChanged -= new EventHandler(detailForm_VisibleChanged); form.VisibleChanged += new EventHandler(detailForm_VisibleChanged); form.Show(); detailForm.UpdateContent(); //if (detailForm is ArchiveDetailForm) //{ // (detailForm as ArchiveDetailForm).UpdateContent(); //} //else if (detailForm is ArchiveSeeForm) //{ // (detailForm as ArchiveSeeForm).UpdateContent(); //} // 如果DisplayManager是BindingSource类型的,如果Cancel会导致 PositionChanged,所以只能Disable Grid // && form.ControlManager != null // && (form.ControlManager.State == StateType.Add || form.ControlManager.State == StateType.Edit) // 还不是很好,有问题。Todo IDisplayManagerContainer dmc = detailForm as IDisplayManagerContainer; if (this.MasterGrid != null && dmc != null && dmc.DisplayManager == this.DisplayManager) { this.MasterGrid.ReadOnly = true; } }