Переход Visual Studio между формами

Обновлено: 30.06.2024

Спасибо. Мы получили ваш запрос и незамедлительно ответим.

Присоединяйтесь к нам!

  • Общаться с другими участниками
  • Уведомления об ответах
    на ваши сообщения
  • Поиск по ключевым словам
  • Доступ в один клик к вашим
    любимым форумам
  • Автоматические подписи
    на ваших сообщениях
  • Лучше всего то, что это бесплатно!

*Функции Tek-Tips зависят от того, получают ли участники электронную почту. Присоединяясь, вы соглашаетесь на получение электронной почты.

Правила публикации

Реклама, продажа, рекрутинг, размещение курсовых и дипломных работ запрещено.

Плавный переход между формами

Плавный переход между формами

В Menu_Load ("Обрабатывает MyBase.Load") MainMenu у меня есть следующее:
menu_form = Me
Edit_select.es_form.Hide()

Затем в классе Edit_Select у меня есть следующее:
Общая общая форма es_form As New Edit_select

Вот мой вопрос: когда эта строка Hide() выполняется, это очень прерывистый переход между двумя формами; пользователь может видеть, как одна исчезает, [пауза] и появляется вторая форма. Есть ли более плавный способ перехода от одной формы к другой?

Большое спасибо,
Лазер

Пожалуйста, предоставьте больше информации, поясните.
Почему вы меняете формы, какова цель приложения?

Приведите примеры «профессионально написанных приложений», которые делают то, чего не можете вы.

Я бы попытался ответить, но я не уверен, что вы пытаетесь сделать.

_________________________________________________________________
Есть два способа прожить свою жизнь. Один как будто ничто не является чудом. Другой, как будто все это чудо. - Альберт Эйнштейн

Попробуйте вставить Application.DoEvents() после вызова Hide. Это должно позволить предыдущей форме полностью скрыться до того, как будет нарисована следующая форма.

будет ли это, решать мне

События DoEvent казались хорошей идеей, но, к сожалению, не сработали:

Private Sub mm_search_edit_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Обрабатывает mm_search_edit_btn.Click
menu_form.Hide()
Application.DoEvents()
Edit_select.es_form .Show() 'объявлено ранее на уровне класса (Edit_select) как "Общая общая форма es_form As New Edit_select"
End Sub

Есть задержка более секунды, когда форма вообще не появляется.

Пасц,
Информацию о моем приложении можно найти в верхней части темы 796-750784. Там же объясняется причина, по которой я меняю формы. Когда я сказал «профессионально написано», я просто имел в виду, что я никогда раньше не видел задержку в одну или две секунды между экранами — при этом ничего из приложения не отображалось в промежутке — с каким-либо приложением раньше. /p>

Infinitelo,
я понятия не имею, как это сделать.

Всем,
имеет ли смысл то, что я делаю в целом, а именно объявление "общедоступной общей es_form" и т. д., а затем скрытие и отображение форм? Кто-то предложил вместо этого использовать непрозрачный параметр, но я полагаю, что он по-прежнему позволит нажимать кнопки, даже если они не видны человеку (это плохо).

Любые идеи/предложения приветствуются.

Это снимок в темноте, но; одна секунда звучит ужасно долго, вы что-то обрабатываете или устанавливаете какие-либо соединения с базой данных при загрузке формы?

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

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

Stat792, спасибо за ответ. Больше ничего не делается. Я заметил, что когда я делаю только HIDE, а затем SHOW - это занимает много времени. Только эти две команды сами по себе.

Следующее не предназначено ни для кого конкретно.
Абсолютно должен существовать способ переключения между двумя формами без такой задержки.

Это так расстраивает.

Я чувствую себя немного лучше. но я все так же застрял!

Извините, не хотел флеймить. Я не знал о другой теме, просто пытался помочь.

Я бы предложил именно то, что только что сказал Stat792: показать новую форму, а затем скрыть старую.

Нет, нет, нет, это *не* адресовано вам! Я действительно имел в виду то, что сказал, когда написал: «Следующее не адресовано никому конкретно». Я просто расстроен. Я ценю вашу помощь!

Я отпишусь, если что-то получится. Сейчас я играю со всеми формами SHOW, но использую visible=true/false для их отображения и скрытия.

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

Вы пытались запустить скомпилированный исполняемый файл вне среды IDE?

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

Также вы можете попытаться поместить Me.Show() в качестве самой первой строки в обработчике событий Load формы.

После прочтения вашей первоначальной темы я должен был согласиться с zarkon4. Кажется, что нужна только одна форма. Как вы сказали, каждая форма на 99% идентична. Каждый раз, когда вы открываете новую форму (методом Show), вы должны инициализировать одни и те же элементы управления. И так как вы не закрываете первую форму (только прячете ее), она все равно потребляет ресурсы.
Не то чтобы вы не должны пытаться решить эту проблему.

Я только что создал две формы данных, каждая из которых привязана к другой базе данных, и добавила кнопку, которая открывает другую форму. Я не смог воссоздать вашу проблему. Кажется, что инициализация и полное окрашивание формы и всех элементов управления занимает гораздо меньше секунды, даже при запуске из IDE, даже когда я включаю подключение к базам данных и загрузку данных как часть обработчика событий загрузки. Мои базы данных являются локальными. Мой компьютер 1,6 МГц с 512 МБ ОЗУ.

Надеюсь, это поможет.

Да, пробовал запускать EXE - не быстрее. У меня уже есть me.show() в качестве первой строки.

Мне просто нужен медленный переход формы.

Большое спасибо за помощь,
Lazer

У меня есть странная идея, которую я не знаю, предложил ли кто-нибудь. Почему бы не отобразить вторую форму поверх первой формы, а ЗАТЕМ скрыть первую форму? Если вы не работаете в модальном режиме, у вас не должно быть никаких проблем. И не должно быть "секунды-двух, когда вообще не видно формы". Попробуйте и посмотрите, решит ли это вашу проблему.

Задержку вызывает не команда HIDE, а команда SHOW.

Спасибо за попытку ("пожалуйста, сыграйте еще раз"):-|
Lazer

Хм. Насколько я вижу, вы создаете каждую форму дважды.

Затемнить objNewForm как новый Edit_select
objNewForm.Show()
Me.Hide()

Затем в другой форме (Edit_select) в событии onClose.

Затемнение mParent As Form = Me.ParentForm
Если нет (Me is Nothing), то
DirectCast(mParent, frmMain).show()
End If

Также. Какое именно событие вы используете для вызова этой формы Edit_select?

Я пытался сделать то же самое, и, кажется, нет простого способа сделать это в vb net, однако я нашел следующий URL-адрес для своей работы, и метод 7 кажется наиболее близким к тому, что вы хотите.

упс, забыл указать URL:

Вы "пытались сделать нечто подобное" и что именно? Моя проблема заключается в задержке в 1 секунду (или около того) при переходе между формами, а не в том, как это сделать (как показано в статье).

Подождите минутку.

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

Возможно, я сформулировал это неправильно, и это не совсем правильно, но я говорю о том, что у меня была проблема с переключением форм (я немного новичок в VB), и я столкнулся с этот URL-адрес, и я знаю по своему опыту, по крайней мере, что этот метод не демонстрирует проблем, от которых вы страдаете, поэтому, хотя URL-адрес относится к теме с точки зрения необходимости делать это в первую очередь, а не решать проблемы с ним после его сделано, это все еще может помочь вам получить то, что вы хотите.

На самом деле, после команды SHOW происходит "действие" базы данных:
- добавить 2 параметра
- открыть соединение, если оно еще не открыто
- заполнить набор данных из sqldataadapter (задержка возникает, даже если поиск является точным совпадением (т.е. выберите * из таблицы, где имя = "Джон Доу" и есть только 8500 записей)
- отображать результаты в списке

Возможно, я слишком требователен — разумна ли задержка в 0,5–1,0 секунды (между формами) для вышеуказанных событий для P4 с частотой 1,8 ГГц?

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

В настоящее время я использую этот код;

\\
Private Sub btnJobForm(ByVal.
Dim f As New f010Jobs
Me.Visible = False
f.ShowDialog()
Me.Visible = True
End Sub
//

Однако у этого есть косметический недостаток. Первая форма исчезает
до того, как новая форма полностью закрашивается.Эффект непрофессиональный.

По возвращении все выглядит нормально.

Я не знаю, как заставить форму исчезнуть позже, если только новая форма
не сообщит об исчезновении своему родителю, но я не знаю, как это сделать.

Какие у меня есть варианты? Как лучше всего решить эту проблему?

Спасибо,
dbuchanan




< /p>

Вы можете передать предыдущую форму как объект
следующей форме при инициализации. Затем, когда событие "Активировать" срабатывает в
следующей форме, самое время вызвать метод "Скрыть" предыдущей формы.

<р>1. Инициализировать форму (следующую), передав текущую форму конструктору
2. Вызовите ShowDialog из (следующей)
3. В активном событии (следующего) вызова формы скройте форму, переданную во время
конструкции, убедитесь, что вы поднимаете статическое логическое значение в обработчике активного события,
чтобы предотвратить скрытие каждый раз, когда форма активируется, как вы только хотите < br />это произойдет один раз.

В любом случае это просто идея, на самом деле не пробовал, но теоретически должно
работать.

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

В настоящее время я использую этот код;

\\
Private Sub btnJobForm(ByVal.
Dim f As New f010Jobs
Me.Visible = False
f.ShowDialog()
Me.Visible = True
End Sub
//

Однако у этого есть косметический недостаток. Первая форма исчезает
до того, как новая форма полностью закрашивается. Эффект непрофессиональный.

По возвращении все выглядит нормально.

Я не знаю, как заставить форму исчезнуть позже, если только новая форма
не сообщит об исчезновении своему родителю, но я не знаю, как это сделать.


Младший участник

Как добиться красивого перехода между формами?

Из одного кадра я "загружаю" другой, а затем использую "show vbmodal" для его активации.

Некоторые кнопки второй формы появляются сразу, но остальная часть формы становится видимой только через одну или две секунды, а иногда и больше, в зависимости от формы.

Почему это глупое поведение, которое делает программу очень раздражающей в использовании?

Элитный член

В форме, которая должна отображаться, установите для свойства visible значение visible в событии загрузки. Затем вызовите doevents


private Sub Form_Load()
me.visible = true
DoEvents
End Sub

Лучший способ избежать проблемы — решить ее.


Младший участник

В форме, которая должна отображаться, установите для свойства visible значение visible в событии загрузки. Затем вызовите doevents


private Sub Form_Load() me.visible = true DoEventsEnd Sub


Спасибо за этот ответ. Кажется, это хороший шаг к решению.
К сожалению, это не решение. еще.

Doevents позволили мне избавиться от плохого "поведения кнопок". Теперь форма появляется одним махом (хотя я не совсем понимаю, что делает Doevents. )

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

Кроме того, я часто создаю новую модальную форму из другой модальной формы, что не позволяет мне использовать свойство visible столько, сколько мне бы хотелось. (не разрешено. )

Любая помощь? Объяснение теории может помочь мне лучше понять, что происходит.

RadForm – это альтернатива Telerik стандартной форме Windows Form с изменяемым оформлением, но с дополнительными темами, поддержкой MDI и полной интеграцией с остальными элементами управления Telerik. Все функции просты и интуитивно понятны в использовании и доступны сразу после добавления RadForm в ваш проект.

UI для формы WinForms Обзор

Интеграция

RadForm поставляется со встроенной панелью RadTitleBar для лучшего управления внешним видом.Он также поддерживает полную и простую интеграцию с любыми элементами управления формами, такими как RadStatusStrip, RadRibbonBar и RadMenu, для простого создания форм и простоты разработки


Конвертер форм

Конвертер форм позволяет без кода преобразовывать форму WinForms по умолчанию в многофункциональную и настраиваемую форму или форму RibbonForm в пользовательском интерфейсе Telerik для WinForms прямо из конструктора Visual Studio и экономить драгоценное время разработки. Функциональность легко доступна из панели инструментов Visual Studio и предлагает раскрывающийся диалог для переключения либо на RadForm, либо на RadRibbonForm.

Telerik UI для WinForms — формы и диалоги - Конвертер изображений

Поддержка MDI

RadForm можно использовать в сценариях многодокументного интерфейса (MDI). С MDI единая строка меню (на основе RadMenu) используется всеми дочерними окнами, уменьшая беспорядок и повышая эффективность использования экранного пространства. С помощью функции слияния меню RadMenu, когда дочерняя форма развернута, RadMenu автоматически объединяет свои элементы с меню в родительской форме; когда дочерняя форма восстанавливается/сворачивается, состояния родительского и дочернего меню восстанавливаются. RadForm также обеспечивает свертывание, восстановление, развертывание и неактивное состояние для основной и дочерней форм.


Поддержка активного/неактивного состояния

В зависимости от выбранной формы RadForm активна или неактивна, а переход между состояниями анимированный

WinForm MDI

Простая настройка

Помимо всех свойств и функций, доступных в стандартной форме, которые позволяют вам использовать имеющиеся у вас знания о Windows Forms, RadForm предлагает некоторые дополнительные преимущества, такие как возможность создания тем, аналитика и т. д.

Внешний вид

Элемент управления поставляется с богатым набором тем, которые позволяют легко создавать привлекательные интерфейсы с внешним видом некоторых из последних версий Windows и Office. Темы можно легко переключать с помощью одного свойства.

Наша платформа также поддерживает пользовательские темы, которые можно создавать с нуля в соответствии с вашими визуальными требованиями с помощью инструмента повышения производительности Visual Style Builder.

Читайте также: