当我尝试在程序中的不同表单之间切换时,我总是遇到异常。也许你会帮助我解决这个问题。以下是异常消息:
Control.Invoke必须用于与在单独的线程上创建的控件进行交互
我已将表单附加到非常好的变量,当我尝试使用MyForm.Show()等命令时会出现此问题。
当表单没有附加到变量时,它不会发生,但是我在刷新文本框和内容时遇到了崩溃问题。
希望很快能听到你的声音!
编辑;
我有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
这是我努力获得对刷新表单的完全控制的方法。这是适用于Windows CE的Motorola Scanner程序。现在,例如,当我在LoginForm中输入正确的密码时,我想切换到RegularForm。当我尝试使用RegularForm.Show()或RegularForm.ShowDialog或RegularForm.BringToFront()时,我得到一个例外。当我尝试使用frmRegularUse.Show()调用表单时,我可以调用表单,但我相信它是在不同的线程中创建的,所以我放松了对它的控制(当我尝试从键盘上放一些东西时,没有回应)。
答案 0 :(得分:1)
我怀疑表单是在不同的线程中创建的,但如果它们是STOP,请返回并修复它。应该从主GUI线程创建和访问所有表单。其次,我不认为你“新”了形式。你需要这样的东西:
StartupForm = New frmStartup
RegularForm = New frmRegularUse
LoginForm = New frmLogin
PasswordForm = New frmPassword
SettingsForm = New frmSettings
答案 1 :(得分:0)
实际上,我所做的是:
我仍然在主模块中使用相同的代码,即:
Public StartupForm As frmStartup
Public RegularForm As frmRegularUse
Public LoginForm As frmLogin
Public PasswordForm As frmPassword
Public SettingsForm As frmSettings
我设法让它以最简单的方式工作。例如 - 我运行Login表单,并执行以下代码(长话短说):
LoginForm = Me
frmRegularUse.ShowDialog()
我跳转到frmRegularUse表单,再次执行:
RegularForm = Me
frmPasswordForm.ShowDialog()
等等...... 我做了一些测试,它工作得很好。明天我会尝试让它更复杂一点。 ; - )