Jo_vb.net Ответов: 2

Vb.net - как загрузить форму в определенное место


Я хочу показать вторую форму, которая показывает подробные данные о определенной позиции, и вторая форма должна быть прятать элемент управления на главной форме.

Подформа загружается с правильным размером, но не в ожидаемом положении.

Есть идеи, как реализовать мой план?

Что я уже пробовал:

SubForm.Show()
SubForm.Size = Me.childView.Size
SubForm.Location = Me.childView.Location

2 Ответов

Рейтинг:
8

Sandeep Mewara

Если вы ищете определенное местоположение, используйте: FormStartPosition Enum (System.Окна.Формы) | Microsoft Docs[^]

Одним из перечислений является инструкция[^] для расположения точки:

Public Sub New()
    InitializeComponent()
    Me.StartPosition = FormStartPosition.Manual
    Me.Location = New Point(0, 0)
End Sub


Что касается связи между ребенком и родителем, то вы можете использовать несколько способов - обратный вызов, делегаты, свойства.


Рейтинг:
14

OriginalGriff

Попробуйте установить местоположение перед звонком Show, и убедитесь, что место, в которое вы его устанавливаете, находится относительно экрана, а не существующей формы. Если вы хотите, чтобы он был привязан к форме, вам нужно добавить верхние левые координаты этой формы к местоположению дочернего элемента управления, прежде чем устанавливать его.

Но имейте в виду, что это, вероятно, не будет работать так, как вы хотите - Show не является модальным вызовом, поэтому, если пользователь нажмет в любом месте вашей исходной формы, новая форма потеряет фокус и будет скрыта за первой.
Скорее всего, вы хотите использовать UserControl вместо формы, если хотите, чтобы он охватывал элементы управления в вашей существующей форме.


Jo_vb.net

Я рад получить ответы, но мне интересно, почему мой вопрос не появляется на главной странице CP?

Me.childView-это UserControl, но он работает не так, как мне бы хотелось.

Части моего демо-проекта взяты из статей CP о Master/Detail GridViews.

Но у большинства из них есть проблема с клавишами, не работающими на childView - это предотвращает перемещение по дочерней сетке с помощью клавиш со стрелками.
То же самое происходит с клавишами page up/down и pos1/end.

Вместо навигации по childView эти клавиши позволяют перемещаться по основной/родительской форме.

Есть только один без этой проблемы - но в C#, и я не понимаю, как эта проблема там исправлена:
https://www.codeproject.com/Tips/1215736/Master-Detail-Datagridview-in-Csharp

Вот почему я стараюсь делать детали с моей собственной подформой.

OriginalGriff

Он есть: он находится под "вопросами" с правой стороны, в настоящее время Второй сверху.
Если вы смотрите на главную страницу QA, Проверьте свои фильтры (справа) и вкладку, которую вы просматриваете (вверху слева).

Jo_vb.net

Хорошо, когда фильтр-это все, что он появляется.
когда фильтр .NET, он не появляется.

OriginalGriff

Потому что ваш вопрос помечен как "VB.NET" & "WinForms.Net" only. ".NET" - это совершенно другой тег.

Jo_vb.net

Порядок строк кода не изменяет результирующее смещение между позицией Me.childView и позицией Субформы.

Когда я добавляю MainForm.Location + Me.childView.Расположение тогда смещение меньше и размер в порядке, но подформа охватывает только части элемента управления Me.childView.

Вот что у меня сейчас есть:

Подчиненная форма.Показать()
Подчиненная форма.BringToFront()
Подчиненная форма.Размер = Меня.файле childview.Размер
Подчиненная форма.Расположение = Новая Точка(Форму Mainform.Расположение + Меня.файле childview.Местоположение)