views:

64

answers:

2

Basically I want 200 characters maximum to come up in Console.ReadLine() for user input before characters start being suppressed. I want it like TextBox.MaxLength except for console input. How would I go about this?

And I don't want to do input.Substring(0, 200).

Solved:

I used my own ReadLine function which was a loop of Console.ReadKey().

It looks like this, essentially:

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();

Thanks everyone

+6  A: 

There is no way to limit the text entered into ReadLine. As the MSDN article explains,

A line is defined as a sequence of characters followed by a carriage return (hexadecimal 0x000d), a line feed (hexadecimal 0x000a), or the value of the Environment.NewLine

What you can do, is use ReadKey in a loop that does not allow going over 200, and breaks if the user keys Environment.NewLine.

Traveling Tech Guy
+3  A: 

If you can use Console.Read(), you can loop through until you reach the 200 characters or until an enter key is entered.

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

Turns out that Console.ReadKey() is preferred to Console.Read().

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

Edward Leno
Yea, I just solved my problem using Console.ReadKey
Marlon