【问题标题】:Showing MsgBox() with nowait (no user input) is not the real issue使用 nowait(无用户输入)显示 MsgBox() 不是真正的问题
【发布时间】:2014-12-11 18:35:25
【问题描述】:

我已经搜索了很多如何显示不会等待用户输入(按确定或取消)的 Msgbox。 我找到了 3 个解决方案。

1- 在另一个线程中显示MsgBox() 或使用BackgroundWorker()

2- 创建一个显示消息的表单,然后通过计时器关闭表单并使用它而不是 Msgbox()

3- 使用 API MessageBoxA()

假设我有一个从 1 到 100 的循环,我想为 i(counter) 显示一条消息

当我测试以上 3 种方法时,我发现这不是正确的方法,我不需要 msgbox() 在显示消息后自行关闭,因为这将显示 100 对话框。

我真正想要的是只显示 1 个 MsgBox() 并相应地更改文本。

我设法使用一个 Form() 作为类来做到这一点,我使用 Application.DoEvents 做到了这一点

我知道可以使用 BackgroundWorker 或 Threading 来完成,因为很多人建议不要使用 Application.Doevents

这是我的代码

Dim oWW As New WaitWindow With {.TopLevel = True,.TopMost = True,.StartPosition = FormStartPosition.CenterScreen}
oWW.Show(Me)
For i = 1 to 100
    Threading.Thread.Sleep(500) ' Just to slowdown execution
    oWW.SetMessage("Counter = " + i.ToString)
Next
oWW.Dispose()


Public Class WaitWindow
    Sub SetMessage(ByVal Message As string)
        lbl_message.Text = Message
        Application.DoEvents
    End Sub
End Class

WaitWindow 只不过是一个带有标签 (lbl_message) 的 Form 基类

该代码工作正常(仅在当前显示的表单中心显示 WaitWindowForm 一次,然后我更改文本)

我有 3 个问题:

1- 如何在工作窗体的右上角显示WaitWindowForm?

2-是否可以只显示一次正常的MsgBox()MessageBox.Show(),然后捕获显示的文本并进行更改?

3- 哪一个适合我的问题(BackGroundWorker 或 Threading),如果我决定使用 Backgroundworker 或 Threading 而不是 Application.DoEvents,我发布的 WaitWindow 类中的代码将是什么(更改标签文本未显示带有新文本的新表单)?

一篇文章中有 3 个问题.. 嗯.. 谁在乎,我不是会回答的人,哈哈 :)

提前致谢。

【问题讨论】:

  • 回滚。我会删除这个问题。
  • 当我问一个不相关的问题时,应该投-2票吗?我应该认真(大声笑)投反对票吗?这都是相关的。没有兴趣从这些病态的人那里获得帮助。
  • 让管理员删除它。我在这里完成了
  • "如何在工作窗体的右上角显示 WaitWindowForm?"将 TopLevel() 设置为 False,相对于客户端坐标设置适当的 Location(),然后将其添加到表单/容器的 Controls() 集合中并调用 Show()。

标签: vb.net multithreading backgroundworker msgbox


【解决方案1】:

我认为您真正遇到的问题是您试图将消息框用于不适合的内容。如果您想让文本不断变化,只需在应用程序的右上角添加一个文本框,并在每次需要显示新消息时进行调整。

您还可以查找对话窗口(在 google 中搜索“.showdialog() vb.net”)可能也会有所帮助。

【讨论】:

  • codeproject.com/Articles/63507/A-Simple-Wait-Window 检查这个,VFP 中存在为用户显示消息的奇怪生物,那个人做到了,但不是我想要的方式。我希望它在 vb.net 中的任何时候在我的应用程序中使用它,而不是在任何地方添加它。
  • 我希望它在 vb.net 中每当我在我的应用程序中有表单时使用它据我所知,这几乎就是链接中的项目所做的。这是一个表单,您可以在应用程序中的任何表单或类中调用它,并将文本设置为您想要的任何内容...
  • 上述方法对于填充 datagridview sybcronizing 并显示消息不起作用(或者我没有如何使其工作)。
  • 这就是我所做的。我想要的只是不使用 Application.DoEvents MyWaitWindowProject
猜你喜欢
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
相关资源
最近更新 更多