C#窗体窗体:Mdi父窗体和子窗体问题
我有一个父窗体设置为Mdi容器。我从父窗体中的菜单栏中单击加载名为Plot的子窗体。该代码是:C#窗体窗体:Mdi父窗体和子窗体问题
protected void menuPlot_Click(object sender, EventArgs e)
{
// ... load form with Plot settings in center of parent form
// ... create a new instance of the Plot settings child form
PlotSettings plotSettings = new PlotSettings();
// ... set Welcome as the parent form for the Plot settings child window
plotSettings.MdiParent = this;
// ... display and position Plot settings child form
plotSettings.StartPosition = FormStartPosition.CenterScreen; // center child form
plotSettings.Show(); // display child form
}
这种运作良好,除了我有以下问题:
有没有什么办法可以强制孩子形式留在*。目前我能够在容器内拖动它。我想阻止用户移动它。我现在唯一能想到的就是让孩子形成无国界的边界,但我不确定这是否会奏效。
有什么办法可以让儿童表格模态?是的,我知道我可以制作孩子表格模式,但不会再被包含在父表格中,这正是我想要的。是否有一种方法可以在子窗体处于活动状态时禁用父控件?目前,我可以打开子窗体的多个实例,但我希望随时只有一个实例。
我在父窗体上有一些标签,标签总是坐在子窗体的顶部。有没有办法强制儿童表格成为最顶层?我使用TopMost,这似乎不起作用。
感谢您的任何帮助,您可能会提供。
怎么样设置ControlBox
,MinimizeBox
和MaximizeBox
为False,设置WindowState
到Maximized
?
然后,您可以有一个Panel或GroupBox或以最大化的子窗体为中心的其他视觉元素,以便它始终保持在屏幕的中心,并且用户无法调整该元素的大小或以其他方式移动它。至于只打开一个实例,这只是忙碌的工作:当你打开表单时,将打开的实例注册到一个静态类中;当它关闭时取消注册。在打开表单之前,检查一下是否有一个实例在静态类中注册;如果是这样,请将重点放在它上面,如果没有打开一个新的实例。
将检查了这一点。谢谢。 – Zeos6
-
使用子窗体“LocationChanged”事件并将代码放在窗体的中心。
this.Left = ((this.ParentForm.ClientRectangle.Width - this.Width)/2); this.Top = ((this.ParentForm.ClientRectangle.Height - this.Height)/2);
-
具有以下形式检查它的只有一个实例的所有脑干使用:
if (!this.MdiChildren.Any<Form>(item => item is Form1)) { }
您可以手动重绘MDI窗体窗口上的图形,但否则我不会把任何控件有。 (您需要重写OnPaint和OnPaintBackgound。)
实例检查似乎不适用于我,但我明白了这个概念。我会尽力去玩。谢谢。 – Zeos6
这是三次“否”。你真的似乎不想使用MDI。使用另一个窗口模型,如http://sourceforge.net/projects/dockpanelsuite/ –
谢谢你的链接。您可能是对的,但我认为可能有办法 – Zeos6
您无法在父窗体上进行任何控制,如果它们可见,它们将始终显示在子窗体的顶部。看看这个答案,我给了一个simular [问题](http:// *。com/a/4130055/479512) –