2016-07-26 1 views
-2

мои коллеги! Я создаю свою собственную командную строку, и я хочу кое-что узнать об этом. Когда моя программа из задачи, например, этот код:VB Console Application, без задач auto-close

 ElseIf cmdStr = "version" Then 
     Console.ForegroundColor = ConsoleColor.White 
     Console.Write("Current version: ") 
     Console.ForegroundColor = ConsoleColor.Yellow 
     Console.Write(appVersion) 
     Console.ForegroundColor = ConsoleColor.Black 
     Console.ReadLine() 

После Console.Readline() есть пустое пространство. Консольное приложение отключится. Есть ли способ разрешить выполнение задачи, если нет задачи? я всегда ставлю это в тех местах покупать право:

Console.Clear 
Main() 

Но я устал делать это, так как я почти достиг 50 команд. Есть ли способ? Спасибо за ваше время!

+0

Вы могли бы направить его к другому югу? – Werdna

+0

Поместите все это в бесконечный цикл 'While'? Когда вы хотите остановить задачи, просто вызовите 'Exit While', и он должен продолжить строки после цикла (если есть). –

+1

Я не думаю, что это сработает, но вы попробовали 'console.readkey'? – BanForFun

ответ

1

Если вы находите, вы переписываете много кода, чтобы команды смотрели на их рефакторинг. Вы упоминаете вы устали от вызова ясно и обратно в основные подлодки, но если это общее между всеми вашими командами, то вы могли бы сделать что-то вроде этого:

Public MustInherit Class ConsoleCommand 
    MustOverride Sub command 
    Public sub run() 
     command() 
     Console.ReadLine() 
     Main() 
    End sub 
End Class 

Public Class VersionCommand 
    Inherits ConsoleCommand 
    Public Overrides Sub command() 
     Console.ForegroundColor = ConsoleColor.White 
     Console.Write("Current version: ") 
     Console.ForegroundColor = ConsoleColor.Yellow 
     Console.Write(appVersion) 
     Console.ForegroundColor = ConsoleColor.Black 
    End Sub 
End Class 


Public Class CommandFactory 
    Public Function GetCommand(cmdStr As string) As ConsoleCommand 
     Select Case cmdStr 
      Case "version" 
       Return New VersionCommand 
      Case Else 
       Return nothing 
     End Select 
    End Function 
End Class 

затем в главных подразделах:

sub Main() 

dim factory as new CommandFactory() 
dim cmdText as string = Console.ReadLine() 
dim command = factory.GetCommand(cmdText) 
command.run() 

end sub 

Альтернативно удалить

Console.ReadLine() 
Console.Clear 
Main() 

от каждого, если/другое отделение и поместить его после End If

// В ответ на оригинальные плакаты комментарий вокруг желающих выйти на «Закрыть»

Sub Main() 

dim cmdStr as string = String.Empty 
do until cmdStr = "Close" 
cmdStr = Console.ReadLine() 
'Your if block goes here, minus the call back into main - which is now looping 
loop 

End Sub 
+0

Спасибо, за ваше время и усилия. Но это не решает мою проблему. Мне все равно нужно ввести все в разделе «Случай». У этого есть 2 плохие стороны. 1: Мой код увеличивается. 2: Я мог бы просто сделать «Main()», как сейчас. – Rootel

+1

Если вы делаете вызовы Console.ReadLine(), Console.Clear + Main() в каждой ветке if/else, то рефакторинг таким образом сохранит вам довольно много кода, значит, вы придерживаетесь принципа DRY и что ваш основной юзер будет содержать только несколько строк кода –

+0

Да, я понимаю. Но я не хочу делать это как (модем), я испытал много ошибок с этим. Я хочу знать, как не закрывать приложение, только с помощью команды «Закрыть» и кнопки выхода. – Rootel