【问题标题】:Switching between forms (VB.NET)在表单之间切换 (VB.NET)
【发布时间】:2011-11-25 22:03:52
【问题描述】:

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

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

【问题讨论】:

  • MyForm 是表单的类名还是类的实例?
  • 请发布一些代码,展示您如何创建和显示不同的表单,这将有助于我们了解问题所在。

标签: vb.net forms refresh switching


【解决方案1】:

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

StartupForm = New frmStartup 
RegularForm = New frmRegularUse 
LoginForm = New frmLogin 
PasswordForm = New frmPassword 
SettingsForm = New frmSettings 

【讨论】:

  • ".NET Compact Framework 的目标版本不支持后期绑定" ;-)
  • 是的,VB.NET 'form type = form object' 特性让很多 vb 程序员在尝试线程时陷入了深深的困境。首先调用 STOP,frmStartup.BeginInvoke() not 工作。
  • @jarek 我不确定你想说什么,但我一直在为 Moto 和 Intermec 嵌入式设备编写代码。如果您想要表单的单个命名实例,那么您需要将该代码包含在您的 Sub Main 中。在对 Application.Run() 的调用中,传递作为您的主要表单的单例...不要再新建它。
【解决方案2】:

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

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

等等……
我做了一些测试,效果很好。明天我会试着让它更复杂一点。 ;-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 2012-04-23
    • 1970-01-01
    相关资源
    最近更新 更多