DataGridView隐藏在MenuStrip后面

时间:2014-08-20 15:06:51

标签: c# winforms datagridview menustrip

我在应用程序中显示DataGridView对象,但其中一部分隐藏在屏幕顶部的MenuStrip(在同一应用程序中)后面。< / p>

我不知道这是否重要,但MenuStrip是使用Visual Studio设计器创建的,而DataGridVie w是以编程方式创建的。

我将DataGridView的对象设置为DockStyle.Fill,我尝试了其他样式,并尝试使用AnchorStyle,但都没有效果。

隐藏的部分几乎就是列标题部分。

有没有办法解决这个问题?也许以某种方式设置它相对于MenuStrip

3 个答案:

答案 0 :(得分:3)

使用Anchor属性而不是dock属性。这样的事情应该有效:

grid.Top = menuStrip1.Height;
grid.Height = this.ClientSize.Heigth - menuStrip1.Height; //this => parent form
grid.Width = this.ClientSize.Widht;
grid.Anchor = AnchorStyles.Bottom | AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;

编辑:请注意 如果DockProperty被设置为以外的任何内容,则会覆盖Anchor属性

答案 1 :(得分:0)

当您使用Dock这样的属性时,添加到表单的控件的顺序会影响布局。您可以简单地使用BringToFront方法来解决问题:

MenuStrip ms = new MenuStrip();
ms.Items.Add("File");
this.Controls.Add(ms);

DataGridView dgv = new DataGridView();
dgv.Columns.Add("Test", "Test");
dgv.Dock = DockStyle.Fill;
this.Controls.Add(dgv);
dgv.BringToFront();

答案 2 :(得分:0)

首先通过将其放入Form的加载或显示事件中来检查当前的Parent:

Console.WriteLine( menuStrip1.Parent.Text + "<---menuStrip1.Parent---");

如果MenuStrip被正确停靠,您应该在输出中看到您的表单标题文字。 如果不是,您可以注销menuStrip1.Parent.Name。也许在对接DataGridView

之前将父级设置为表单就足够了
menuStrip1.Parent = this;

if 可以帮助您确实修复初始错误:

删除MenuStrip(剪切),确保Form顶部有空余空间并再次添加(粘贴)。如果他们没有足够的空间停靠在窗口的顶部MenuStrips倾向于停靠在其他地方然后搞乱布局。