2010-08-23 12 views
0

Fondamentalement, je veux 200 caractères maximum à venir dans Console.ReadLine() pour l'entrée de l'utilisateur avant que les caractères commencent à être supprimés. Je le veux comme TextBox.MaxLength sauf pour l'entrée de la console. Comment pourrais-je m'y prendre?Comment est-ce que je peux limiter le nombre de caractères pour une entrée de console? C#

Et je ne veux pas faire input.Substring(0, 200).

Résolu:

J'ai utilisé ma propre fonction ReadLine qui était une boucle de Console.ReadKey().

Il ressemble à ceci, essentiellement:

StringBuilder sb = new StringBuilder(); 
bool loop = true; 
while (loop) 
{ 
    ConsoleKeyInfo keyInfo = Console.ReadKey(true); // won't show up in console 
    switch (keyInfo.Key) 
    { 
     case ConsoleKey.Enter: 
     { 
       loop = false; 
       break; 
     } 
     default: 
     { 
       if (sb.Length < 200) 
       { 
        sb.Append(keyInfo.KeyChar); 
        Console.Write(keyInfo.KeyChar); 
       } 
       break; 
     } 
    } 
} 

return sb.ToString(); 

Merci à tous

+0

quel est le scénario global? – obelix

Répondre

3

Si vous pouvez utiliser Console.Read(), vous pouvez effectuer une boucle jusqu'à ce que vous atteigniez les 200 caractères ou jusqu'à ce qu'une entrée soit entrée.

StringBuilder sb = new StringBuilder(); 
int i, count = 0; 

while ((i = Console.Read()) != 13) // 13 = enter key (or other breaking condition) 
{ 
    if (++count > 200) break; 
    sb.Append ((char)i); 
} 

EDIT

se trouve que Console.ReadKey() on préfère Console.Read().

http://msdn.microsoft.com/en-us/library/471w8d85.aspx

+0

Oui, je viens de résoudre mon problème en utilisant Console.ReadKey – Marlon

8

Il n'y a aucun moyen de limiter le texte entré en ReadLine. Comme le MSDN article explique,

Une ligne est définie comme une séquence de caractères suivis par un chariot retour (0x000D hexadécimal), un saut de ligne (de 0x000A hexadécimal), ou la valeur du Environment.NewLine

Ce que vous pouvez faire, est d'utiliser ReadKey dans une boucle qui ne permet pas d'aller plus de 200, et casse si l'utilisateur touche Environment.NewLine.