0

当我尝试在程序中的不同表单之间切换时,我总是会遇到异常。也许你会帮我解决这个问题。这是异常消息:

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() 调用表单时,我可以调用表单,但我相信它是在不同的线程中创建的,所以我失去了对它的控制(当我尝试从键盘输入一些东西时,没有回应)。

4

2 回答 2

1

我怀疑这些表单是在不同的线程中创建的,但如果它们是 STOP,请返回并修复它。您的所有表单都应该从主 GUI 线程创建和访问。其次,我认为您没有“更新”表格。你需要这样的东西:

StartupForm = New frmStartup 
RegularForm = New frmRegularUse 
LoginForm = New frmLogin 
PasswordForm = New frmPassword 
SettingsForm = New frmSettings 
于 2011-09-27T13:08:01.563 回答
0

实际上,我所做的是:
我在主模块中仍然有相同的代码,即:

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()

等等......
我做了一些测试,它工作得很好。明天我会试着让它更复杂一点。;-)

于 2011-09-27T18:51:06.397 回答