我在应用程序中显示DataGridView
对象,但其中一部分隐藏在屏幕顶部的MenuStrip
(在同一应用程序中)后面。< / p>
我不知道这是否重要,但MenuStrip
是使用Visual Studio设计器创建的,而DataGridVie
w是以编程方式创建的。
我将DataGridView
的对象设置为DockStyle.Fill
,我尝试了其他样式,并尝试使用AnchorStyle
,但都没有效果。
隐藏的部分几乎就是列标题部分。
有没有办法解决这个问题?也许以某种方式设置它相对于MenuStrip
?
答案 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
倾向于停靠在其他地方然后搞乱布局。