2013-08-12 2 views
1

Я пишу приложение Windows Forms в VB.NET. У меня есть три формы: основная форма, которая показывает список учетных записей, форму учетной записи, которая позволяет пользователю просматривать/редактировать информацию для конкретной учетной записи и форму политики, которая позволяет пользователю просматривать/редактировать информацию на конкретной политики для этой учетной записи. Я хочу, чтобы формы отображались так, как если бы они были одним и тем же окном. Пример: когда приложение запускается, пользователь нажимает имя учетной записи в списке в основной форме и нажимает «редактировать». Я хочу, чтобы окно оставалось в том же месте и остается тем же самым точным размером, только содержимое основной формы заменяется содержимым формы учетной записи. То же самое, если пользователь затем выбирает изменить политику из формы учетной записи. Когда пользователь заканчивает работу и нажимает «Сохранить», возвращается основная форма. Через весь этот прецедент, пользователю казалось бы, как будто они просматривали одно и то же окно все время, при этом содержимое этого окна менялось.Создание нескольких форм в VB.NET

Как я могу это сделать? Я пытался что-то вроде:

Dim newForm as New AcctForm 
newForm.Location = Me.Location 
newForm.Show() 
Me.Close() 

Проблема в том, что если пользователь перемещает исходное окно, появится новое окно, в котором родительская форма первоначально появилась не там, где она закончилась.

+5

Используйте UserControls вместо форм. –

+2

Невозможно использовать панели для этого? Или, как говорит HighCore, пользовательские элементы управления? –

+2

+1 К элементам управления пользователя. Создайте три UserControls (по одному для каждой из ваших форм). Затем разместите их соответственно (или покажите/скройте их). –

ответ

4

Я вижу, что это уже в комментариях, но то, что я делал в этом случае в прошлом, строит каждую «форму» в приложении как пользовательский элемент управления. Затем у меня есть одна действительная форма, и навигация работает, изменяя, какой пользовательский элемент управления загружается в родительскую форму. Чтобы перейти от одного экрана/вида к другому, вы удаляете текущий пользовательский элемент управления из коллекции элементов формы и добавляете новый настраиваемый элемент управления.

Я считаю, что это лучше, чем вручную устанавливать начальную позицию и размер, поскольку вы можете использовать методы формы .SuspendLayout() /. ResumeLayout(), чтобы скрыть промежуточное состояние, в котором нет управляемой загрузки, от пользователя , Это сложнее сделать, если вы хотите, чтобы одна форма была полностью заменена другой.

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

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

Наконец, переход на использование этой схемы проще, чем вы думаете. Просто перейдите к коду для каждой из ваших текущих форм, и вы обнаружите, что каждый класс в настоящее время наследуется от System.Windows.Forms.Form. В большинстве случаев все, что вам действительно нужно сделать, это изменить их на наследование из System.Windows.Forms.Panel, и вы больше всего там.

+0

Спасибо за информацию, я решил перепроектировать и перейти с элементами управления. –

1

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

Однако, чтобы ответить на ваш вопрос о, казалось бы, случайное место ваших форм, первое, что нужно проверить, что каждая форма имеет значение StartPosition.

Если ваша основная форма изменчиваема, то я бы также добавил код для настройки newForm на тот же размер.

Я надеюсь, что это поможет с вашими непосредственными проблемами; так что вы можете перейти к перепроектированию приложения!

+0

Спасибо за ваш ответ, см. Мой комментарий к вопросу о том, почему начальная позиция руководства все еще не была идеальной для того, что я пытался сделать. –

0

добрый утро есть другой способ.установить свойство для второй форме (самый верхний) и использовать также

from2.show(); 

, которые делают переключение между формами и держать Form2 топ другие

Благодаря

0

попробуйте использовать ShowDialog()

Dim newForm as New AcctForm 
newForm.Location = Me.Location 
newForm.ShowDialog() 
Me.Close() <-- removed this 
Смежные вопросы