So I got my help screen all fancy, but not quite. There is a slight annoyance. To give an idea of the layout of the code, there is a title screen with options, and the result of the option takes you in to a switch (case 2: for the help screen). Then it enters a while loop to account for page changing, and other bits. Then there is another switch to figure out what page it should be on, and the input (left and right arrow keys) modifies the switch case to change pages. On page two I also check for the up and down arrow keys. However, and this is not only just for this section as an answer would make overall control much easier, the scrolling up and down is a little on the annoying side. It's clear that the input buffer (of something, console window, keyboard, whatever) is filling up nicely if you hold down the arrow keys, and the scrolling completely interrupts any ability to press left or right to leave this page. Is it possible to set or change the input buffer to a size of one (or similar) for a time so that control is much simpler without having a huge queue of 'UpArrow' in the buffer?

I will state that this is in an assignment, but not the actual assignment requirements, the lecturer said we could spice things up, and a help section is not required

But here's my relevant code:

Code:
case 2: // help
#region nice big console.write outputs here...
Console.Clear();
screenNumber = 1;
stayInHelp = true;
int firstLine = 0;
while (stayInHelp)
{
	switch (screenNumber)
	{
		case 1:
			//page 1 of help, just bumpf for you guys
                                                break;
		case 2:
			#region help page 2
			blankScreenOutput();
			OutputALineOf.Text(5, 3, "How to play");
			OutputALineOf.Dashes(5, 4, 11);
			OutputALineOf.Text(7, 6, "Each player takes turns rolling the pigs.");
			OutputALineOf.Text(7, 8, "The pigs land a certain way giving you a score for that roll.  The");
			OutputALineOf.Text(5, 9, "scoring table below gives you the scores for all possible rolls.");
			for (int i = 0; i < 9; i++)
			{
				OutputALineOf.Text(5, 11 + i, tableString[i + firstLine]);
			}
			OutputALineOf.Text(5, 21, "Press the left arrow key to return to page 1 of help, or the right");
			OutputALineOf.Text(5, 22, "arrow key to see page 3 of help.  Press up or down to scroll the table.");
			// need to read in an up or down key and scroll that table
			keyPress = Console.ReadKey(true);
			if (keyPress.Key.ToString() == "UpArrow")
			{
				//scroll the table up
				//Console.SetCursorPosition(0, 11);
				firstLine--;
				if (firstLine < 1)
				{
					firstLine = 0;
				}
			Thread.Sleep(100);
			}
			else if (keyPress.Key.ToString() == "DownArrow")
			{
				//scroll the table down
				//Console.SetCursorPosition(0, 11);
				firstLine++;
				if (firstLine > 40)
				{
					firstLine = 40;
				}
				Thread.Sleep(100);
			}
			#endregion
			break;
		case 3:
			//page 3 of help, again more bumpf
			break;
	}
	//here check the input
	if (keyPress.Key.ToString() == "RightArrow")
	{
		screenNumber++;
	}
	if (keyPress.Key.ToString() == "LeftArrow")
	{
		screenNumber--;
	}
	if (screenNumber < 1 || screenNumber > 3)
	{
		stayInHelp = false;
	}
}
#endregion
break;