【问题标题】:DataGridView is hidden behind MenuStripDataGridView 隐藏在 MenuStrip 后面
【发布时间】:2014-08-20 15:06:50
【问题描述】:

我在应用程序中显示了一个DataGridView 对象,但它的一部分隐藏在屏幕顶部的MenuStrip(在同一应用程序中)后面。

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

我将DataGridView的对象设置为DockStyle.Fill,我尝试过其他样式也尝试过使用AnchorStyle,都没有成功。

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

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

【问题讨论】:

  • 右击DataGridView控件并选择BringToFront。
  • DataGridView 是以编程方式创建的。当然你可以从代码中调用 myGrid.BringToFront(),但这不会解决问题。
  • @TDull 为什么调用 BringToFront 不起作用?我很确定它会的。
  • @LarsTech 我相信 MenuStrip 将始终保持在顶部。但是如果我错了,他最终会将他的 MenuStrip 隐藏在网格后面
  • @TDull 看起来可行,谢谢。

标签: c# winforms datagridview menustrip


【解决方案1】:

使用 Anchor 属性而不是 dock 属性。像这样的东西应该可以工作:

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

编辑:请注意 如果 DockProperty 设置为 None 以外的任何其他值,这将覆盖 Anchor 属性

编辑:更新输入错误

【讨论】:

    【解决方案2】:

    当您使用像 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();
    

    【讨论】:

    • 谢谢,使用 BringToFront 方法解决了这个问题。
    【解决方案3】:

    首先通过将其放入表单的加载或显示事件来检查当前父级:

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

    如果MenuStrip 正确停靠,您应该会在输出中看到表单的标题文本。 如果不是,您可以注销menuStrip1.Parent.Name。也许在停靠DataGridView之前将父级设置为表单就足够了:

    menuStrip1.Parent = this;
    

    但是 如果 确实可以帮助您修复最初的错误:

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

    【讨论】:

      猜你喜欢
      • 2013-10-04
      • 2021-08-23
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-31
      • 2013-11-20
      • 1970-01-01
      相关资源
      最近更新 更多