Переключение между формами (VB.NET) - PullRequest
0 голосов
/ 27 сентября 2011

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

Control.Invoke должен использоваться для взаимодействия с элементами управления, созданными в отдельном потоке

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

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

Надеюсь скоро вас услышать!


edit;

У меня 4 разные формы.Когда я загружаю основной модуль и основную форму, в Sub (...) Handles MyBase.Load я выполняю следующий код:

В модуле:

Public StartupForm As frmStartup
Public RegularForm As frmRegularUse
Public LoginForm As frmLogin
Public PasswordForm As frmPassword
Public SettingsForm As frmSettings

В основной форме:

RegularForm = Me
StartupForm = frmStartup
LoginForm = frmLogin
PasswordForm = frmPassword
SettingsForm = frmSettings

Это тот подход, который я разработал, чтобы получить полный контроль над обновлением форм.Это программа для Motorola Scanner с Windows CE.Теперь, например, когда я ввожу правильный пароль в LoginForm, я хочу переключиться на RegularForm.Когда я пытаюсь использовать RegularForm.Show () или RegularForm.ShowDialog или RegularForm.BringToFront (), я получаю исключение.Когда я пытаюсь вызвать форму с помощью frmRegularUse.Show (), я могу вызвать форму, но я думаю, она создается в другом потоке, поэтому я теряю контроль над ней (когда пытаюсь что-то положить с клавиатуры,ответа нет).

Ответы [ 2 ]

1 голос
/ 27 сентября 2011

Я сомневаюсь, что формы создаются в другом потоке, но если они остановились, вернитесь и исправьте это.Все ваши формы должны быть созданы и доступны из основного потока GUI.Во-вторых, я не думаю, что вы «обновили» формы.Вам нужно что-то вроде этого:

StartupForm = New frmStartup 
RegularForm = New frmRegularUse 
LoginForm = New frmLogin 
PasswordForm = New frmPassword 
SettingsForm = New frmSettings 
0 голосов
/ 27 сентября 2011

На самом деле, я сделал следующее:
Тем не менее у меня есть тот же код в главном модуле:

Public StartupForm As frmStartup
Public RegularForm As frmRegularUse
Public LoginForm As frmLogin
Public PasswordForm As frmPassword
Public SettingsForm As frmSettings

Мне удалось, чтобы он работал максимально простым способом.Например - я запускаю форму входа в систему и выполняю следующий код (короткая история):

LoginForm = Me
frmRegularUse.ShowDialog()

Я перехожу к форме frmRegularUse, где я снова выполняю:

RegularForm = Me
frmPasswordForm.ShowDialog()

И так далее ...
Я сделал несколько тестов, и все работает вполне нормально.Завтра я постараюсь сделать это немного сложнее.; -)

...