Хотите условно изменить цвет переднего плана консоли на основе ввода

c# visual-studio-code .net-core

326 просмотра

1 ответ

10 Репутация автора

Я пытаюсь заставить оператор KeyDown работать. Итак, я пишу:

private void KeyDown(object sender, System.Windows.Forms.KeyEventArgs e);

System.Windows.Formsне сработает, я прочитал, что это код Visual Studio, к которому нужно перейти Project.jsonи добавить System.Windows.Formsв качестве зависимости. Я не знаю, что написать, чтобы добавить это. Я искал в Интернете и искал переполнение запасов. Я ничего не могу найти.

Я не знаю, что набрать, чтобы добавить его.

Автор: Bob Источник Размещён: 13.07.2016 07:20

Ответы (1)


0 плюса

4279 Репутация автора

Решение

Я могу ошибаться, но я не верю, что вы можете использовать System.Windows.Formsсборку с проектом .Net Core. Моя Visual Studio работает так, что я не смог попробовать использовать ее через функцию project.json импорта . Сказав это, это не даст вам то, что вы хотите в любом случае.

Поскольку вы хотите получить ввод от пользователя через консоль и изменить цвет в зависимости от некоторых условий, вам придется делать это вручную самостоятельно.

Ниже приведен полный пример приложения, который показывает, как это сделать. По сути, вы должны оценить каждый символ, введенный в консоль, и определить, является ли это число. Если это число, вам нужно переместить курсор назад на 1 позицию, чтобы вы могли перезаписать только что введенное значение. Перед перезаписью значения вы меняете цвет переднего плана консоли.

using System;
namespace ConsoleApp2
{
    public class Program
    {
        public static void Main(string[] args)
        {
            // Set up an infinite loop that will allow us to forever type unless 'Q' is pressed.
            while(true)
            {
                ConsoleKeyInfo pressedKey = Console.ReadKey();

                // If Q is pressed, we quit the app by ending the loop.
                if (pressedKey.Key == ConsoleKey.Q)
                {
                    break;
                }

                // Handle the pressed key character.
                OnKeyDown(pressedKey.KeyChar);
            }
        }

        private static void OnKeyDown(char key)
        {
            int number;

            // Try to parse the key into a number.
            // If it fails to parse, then we abort and listen for the next key.
            // It will fail if anything other than a number was entered since integers can only store whole numbers.
            if (!int.TryParse(key.ToString(), out number))
            {
                return;
            }

            // If we get here, then the user entered a number.
            // Apply our logic for handling numbers
            ChangeColorOfPreviousCharacters(ConsoleColor.Green, key.ToString());
        }

        private static void ChangeColorOfPreviousCharacters(ConsoleColor color, string originalValue)
        {
            // Store the original foreground color of the text so we can revert back to it later.
            ConsoleColor originalColor = Console.ForegroundColor;

            // Move the cursor on the console to the left 1 character so we overwrite the character previously entered
            // with a new character that has the updated foreground color applied.
            Console.SetCursorPosition(Console.CursorLeft - 1, Console.CursorTop);
            Console.ForegroundColor = color;

            // Re-write the original character back out, now with the "Green" color.
            Console.Write(originalValue);

            // Reset the consoles foreground color back to what ever it was originally. In this case, white.
            Console.ForegroundColor = originalColor;
        }
    }
}

Вывод на консоль будет выглядеть так:

Результат

Автор: Johnathon Sullinger Размещён: 28.07.2016 07:51
Вопросы из категории :
32x32