Консольное приложение - первое окно сообщений не сфокусировано

Я нахожусь в процессе разработки консольного приложения VB.Net для получения идентификатора и пароля от пользователей и должен отображать сообщение при вводе неверного идентификатора или пароля, но я застрял в необычном поведении, наблюдаемом при использовании окна сообщения в консольном приложении. Когда отображается первое окно сообщения, оно не в фокусе, и нам явно нужно сфокусировать окно сообщения. Но следующие последующие окна сообщений находятся в фокусе.

Ниже приведен только пример кода.

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

Просто хочу знать, почему это происходит и что нужно сделать, чтобы первое окно сообщения также было в фокусе?


person user3138788    schedule 30.05.2014    source источник
comment
Зачем отображать окно сообщения из консольного приложения? Да, это может быть сделано; нет, это не очень хорошая идея. Предоставьте пользователю обратную связь внутри приложения, то есть с помощью Console.WriteLine. Кроме того, избавьтесь от этого GoTo и НИКОГДА не используйте его снова. Почему бы вам просто не использовать там цикл Do?   -  person jmcilhinney    schedule 30.05.2014
comment
Привет, @jmcilhinney, спасибо за ответ. Я использовал GoTo, потому что мне нужно начать с самого начала (снова спросить идентификатор и пароль и подтвердить его), поэтому, хотя это сэкономит некоторую строку кода. Но в любом случае буду иметь в виду, что я не буду использовать его для каких-либо других целей. Однако мой вопрос не в том, использовать что-либо или нет, а в том, почему первое окно сообщения находится вне фокуса, а все последующие окна сообщений находятся в фокусе. Если бы я мог получить первое окно сообщения также в фокусе, это решило бы всю мою проблему.   -  person user3138788    schedule 30.05.2014


Ответы (1)


Вы можете использовать MessageBoxOptions.ServiceNotification, чтобы отобразить диалог сверху.

Это преобразовано из приложения С#, поэтому не совсем уверен, что это правильно VB.NET (хотя должно быть):

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

Но учтите следующее:

Вы не должны использовать MessageBox внутри консольного приложения. Это просто два разных мира.

Чтобы объяснить, почему:

Что вы ожидаете, когда запускаете это приложение удаленно с помощью консоли? Тогда нет возможности показать это окно сообщений. Используйте Console.WriteLine, но с другим цветом, если вы хотите показать, что что-то ошибочно, или предупреждение, или что-то хорошее.

person Patrick Hofman    schedule 30.05.2014
comment
Хотя я согласен с тем, что это хороший совет, на самом деле это не ответ на заданный вопрос, поэтому, вероятно, он должен быть комментарием. - person jmcilhinney; 30.05.2014
comment
Привет, Патрик, спасибо за информацию. Но я знаю, что мы не должны смешивать MsgBox в консольном приложении, но я хочу использовать его, потому что 1) это приложение будет использоваться реальными конечными пользователями для ввода своего идентификатора и пароля, и оно будет проверено перед его использованием для любых целей (иногда он используется для подключения к базе данных SQL, иногда для проверки http-веб-ответа для URL-адреса) 2) Я чувствую, что msgbox будет более подходящим, чтобы сообщить пользователю, что данные, которые они ввели, являются недействительными, а не просто показать его как сообщение в консоли. - person user3138788; 30.05.2014
comment
Тогда не используйте консольное приложение и не показывайте сообщение соответствующим образом. - person Patrick Hofman; 30.05.2014
comment
Здравствуйте, Патрик, спасибо за ваше драгоценное время. Я пробовал, но класс MsgBox принимает только 3 параметра: 1) строка, отображаемая в окне сообщения, 2) стиль кнопки и 3) строка, отображаемая в строке заголовка. На данный момент мой единственный вопрос заключается в том, почему первое окно сообщения выходит из фокуса, а все последующие окна сообщений находятся в фокусе. Если я смогу каким-то образом сфокусировать первое окно сообщения, это решит мою текущую проблему. - person user3138788; 30.05.2014
comment
Я действительно не знаю. У Ганса Пассана был ответ, объясняющий больше того, что происходит, но он удалил его. Попросит его восстановить. - person Patrick Hofman; 30.05.2014
comment
@HansPassant: не могли бы вы восстановить свой вопрос? - person Patrick Hofman; 30.05.2014
comment
Привет @PatrickHofman, извините, я думаю, мне нужно импортировать System.Windows.Forms, чтобы использовать MessageBox, а не MsgBox. И после использования MessageBoxOptions.ServiceNotification я вижу, что окно сообщения приходит с Focus, и это решает мою проблему. Большое спасибо за это. Однако я был бы счастлив, если бы кто-нибудь объяснил, почему первый msgbox всегда выходит из фокуса. - person user3138788; 30.05.2014