【问题标题】:Console application - first Message Box is not focused控制台应用程序 - 第一个消息框未聚焦
【发布时间】:2014-05-30 07:44:37
【问题描述】:

我正在开发一个 VB.Net 控制台应用程序以从用户那里获取 ID 和密码,并且在输入无效 ID 或密码时应该弹出一条消息,但是我在使用消息框时遇到了一个奇怪的行为控制台应用程序。当显示第一个消息框时,它是失焦的,我们明确需要使消息框聚焦。但接下来的消息框是焦点。

以下只是示例代码。

Sub Main()
Start:
    Console.WriteLine("Press Enter")
    Console.ReadLine()
    MsgBox("Good Day")
    GoTo Start
End Sub

只是想知道为什么会发生这种情况以及应该怎么做才能使第一个消息框也成为焦点。?

【问题讨论】:

  • 为什么要显示来自控制台应用程序的消息框?是的,可以做到;不,这不是一个好主意。在应用程序内向用户提供反馈,即使用 Console.WriteLine。此外,摆脱GoTo永远再次使用。你为什么不直接使用Do 循环呢?
  • 嗨@jmcilhinney 谢谢你的回复。我正在使用 GoTo 因为我需要从头开始(再次询问 ID 和密码并验证它),所以尽管它会节省一些代码行。但无论如何,请记住,我不会将它用于任何其他目的。但是我的问题是不使用任何东西,而是为什么第一个消息框是失焦的,而所有后续的消息框都是焦点。如果我可以让第一个消息框也成为焦点,那么它将解决我的整个问题。

标签: vb.net console-application messagebox msgbox


【解决方案1】:

您可以使用MessageBoxOptions.ServiceNotification 在顶部显示对话框。

这是从 C# 应用程序转换而来的,因此不确定这是否是正确的 VB.NET(应该是正确的):

MsgBox( "Good Day"
      , ""
      , MessageBoxButtons.OK
      , MessageBoxIcon.Asterisk
      , MessageBoxDefaultButton.Button1
      , MessageBoxOptions.ServiceNotification
      )

但请注意:

您不应该在控制台应用程序中使用MessageBox。这只是两个不同的世界。

解释原因:

当您使用控制台远程运行此应用程序时,您期望什么?那时没有办法显示该消息框。使用Console.WriteLine,但如果要显示错误、警告或好的内容,请使用不同的颜色。

【讨论】:

  • 虽然我同意这是一个很好的建议,但这并不是问题的真正答案,因此可能应该是评论。
  • 您好帕特里克,感谢您的信息。但我知道我们不应该在控制台应用程序中混合 MsgBox,但我想使用它,因为 1)这个应用程序将被真正的最终用户用来输入他们的 ID 和密码,它会在用于任何目的之前进行验证(有时它用于连接到 SQL DB,有时用于检查 http web-response 的 URL) 2)我觉得 msgbox 会更容易告诉用户他们输入的数据是无效的,而不是仅仅将其显示为控制台中的消息。
  • 那就不要使用控制台应用程序,或者以适当的方式显示消息。
  • 帕特里克您好,感谢您宝贵的时间。我试过了,但 MsgBox 类只需要 3 个参数 1)消息框中显示的字符串 2)按钮样式和 3)要显示在标题栏中的字符串。到目前为止,我唯一的问题是为什么第一个消息框会失焦,而所有后续消息框都是焦点。如果我能以某种方式使第一个消息框也成为焦点,那么它将解决我当前的问题。
  • 我真的不知道。 Hans Passant 有一个答案,解释了发生了什么,但他删除了它。会要求他取消删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-15
  • 1970-01-01
  • 2010-10-03
  • 2013-11-30
  • 2016-07-02
相关资源
最近更新 更多