2016-09-11 2 views
1

Quelqu'un a-t-il une idée sur la façon de créer des éléments Intractive et sélectionnables dans la console?Éléments interactifs, sélectionnables et défilants dans l'application Console dans .NET Core comme la console Yeoman

Lorsque vous installez Yeoman comme Node.js package et appelez la ligne de commande avec « yo »,

Ils nous montrent une liste d'éléments qui peuvent choisir défilants jusqu'à les touches fléchées.

Existe-t-il à cet effet un code ou une bibliothèque? (En base .NET)

enter image description here enter image description here

+0

La console n'est pas vraiment destinée à être interactive. Dans les versions récentes (Windows 10, Server 2012 R2), la console est un peu plus conviviale, mais les interactions sont toujours comme la plupart des autres terminaux: en tapant et en appuyant sur Entrée. Pour ce que vous voulez, voir à propos de slapper un bloc de texte de plusieurs lignes sur un formulaire Windows formulaire/wpf et mise en forme en conséquence. – jleach

+1

@ jdl134679 Alors, comment Yeoman at-il cela et fonctionne avec succès? – NBM

Répondre

1

Ils éléments clés de la solution sont:

  • Vous pouvez utiliser Console.ReadKey() pour détecter en appuyant sur des touches fléchées
  • Vous pouvez utiliser Console.CursorTop lire et écrire la position actuelle du curseur

Utilisation de t tuyau deux, voici un code très simple qui fait ce que vous voulez:

int optionsCount = 5; 

int selected = 0; 

bool done = false; 

while (!done) 
{ 
    for (int i = 0; i < optionsCount; i++) 
    { 
     if (selected == i) 
     { 
      Console.ForegroundColor = ConsoleColor.Cyan; 
      Console.Write("> "); 
     } 
     else 
     { 
      Console.Write(" "); 
     } 

     Console.WriteLine(i); 

     Console.ResetColor(); 
    } 

    switch (Console.ReadKey(true).Key) 
    { 
     case ConsoleKey.UpArrow: 
      selected = Math.Max(0, selected - 1); 
      break; 
     case ConsoleKey.DownArrow: 
      selected = Math.Min(optionsCount - 1, selected + 1); 
      break; 
     case ConsoleKey.Enter: 
      done = true; 
      break; 
    } 

    if (!done) 
     Console.CursorTop = Console.CursorTop - optionsCount; 
} 

Console.WriteLine($"Selected {selected}.");