Reputation: 20314
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
Upvotes: 0
Views: 8264
Reputation: 6327
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
Upvotes: 3
Reputation: 27811
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
.
Upvotes: 8