DataGridView скрыт за MenuStrip

Я показываю объект DataGridView в приложении, но часть его скрыта за MenuStrip (в том же приложении), который находится вверху экрана.

Я не знаю, имеет ли это значение, но MenuStrip создается с помощью дизайнера Visual Studio, а DataGridView создается программно.

Я установил объект DataGridView в DockStyle.Fill, я пробовал другие стили, а также пытался использовать AnchorStyle, ни один из них не работал.

Скрытая часть — это часть заголовков столбцов.

Есть ли способ исправить это? Может быть, установить его как-то относительно MenuStrip?


person user3705007    schedule 20.08.2014    source источник
comment
Щелкните правой кнопкой мыши элемент управления DataGridView и выберите BringToFront.   -  person LarsTech    schedule 20.08.2014
comment
DataGridView создается программно. Конечно, вы можете вызвать myGrid.BringToFront() из кода, но это не решит проблему.   -  person TDull    schedule 20.08.2014
comment
@TDull Почему вызов BringToFront не работает? Я почти уверен, что так и будет.   -  person LarsTech    schedule 20.08.2014
comment
@LarsTech Я верю, что MenuStrip всегда будет оставаться наверху ... однако, если я ошибаюсь, он в конечном итоге спрячет свой MenuStrip за сеткой   -  person TDull    schedule 20.08.2014
comment
@LarsTech Как сказал TDull, DataGridView создается программно, поэтому у меня нет возможности сделать это.   -  person user3705007    schedule 21.08.2014
comment
@TDull похоже, это сработало, спасибо.   -  person user3705007    schedule 21.08.2014
comment
@ user3705007 Хороший материал! Я (и мое огромное количество представителей) был бы признателен, если бы вы приняли мой ответ :)   -  person TDull    schedule 21.08.2014


Ответы (3)


Используйте свойство Anchor вместо свойства док-станции. Что-то вроде этого должно работать:

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.

Изменить: обновлена ​​ошибка ввода

person TDull    schedule 20.08.2014

Порядок добавления элементов управления в форму влияет на макет при использовании такого свойства, как 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();
person LarsTech    schedule 20.08.2014
comment
Спасибо, использование метода BringToFront решило проблему. - person user3705007; 21.08.2014

Сначала проверьте текущий Parent, поместив его в событие Load или Shown формы:

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

Если MenuStrip правильно пристыкован, вы должны увидеть текст заголовка вашей формы в выводе. Если это не так, вы можете выйти из menuStrip1.Parent.Name. И, может быть, достаточно установить родителем форму перед стыковкой DataGridView:

menuStrip1.Parent = this;

Но если это поможет, вам действительно следует исправить первоначальную ошибку:

Удалите MenuStrip (вырежьте), убедитесь, что для него есть свободное место в верхней части Form, и добавьте его снова (вставьте). Если у них нет подходящего места для пристыковки к верхней части окна, MenuStrips склонны пристыковываться к другому месту, а затем испортить макет.

person TaW    schedule 20.08.2014