Строка проверки НЕ содержит значения, отличного от известных значений [VB.NET] - PullRequest
3 голосов
/ 28 ноября 2010

Я пытаюсь убедиться, что строка не содержит ничего, кроме известных значений. В этом случае мне нужно убедиться, что он содержит только «Shift», «Control» или «Alt», но не обязательно все из них. Например, они должны быть истинными: «Shift + P», «Shift + Control + H», «Alt + U», но не должны: «Other + P», «Shift + Fake + Y», «Unknown + Shift». + E "и т. Д.

Это код, который я пытался использовать:

If Not shortcut.Contains("Shift") Or Not shortcut.Contains("Control") Or Not shortcut.Contains("Alt") Then
    MessageBox.Show("Invalid")
End If

Мне трудно обернуть голову вокруг необходимой логики, чтобы сделать это. Я предполагаю, что есть логический оператор, который может сделать это?

Ответы [ 2 ]

1 голос
/ 28 ноября 2010

Я считаю, что вы не должны использовать строки для этой цели. Вам нужен тип данных, который может представлять комбинацию горячих клавиш, которая состоит из «нормальной» клавиши и набора модификаторов (Alt, Control, Shift), каждый из которых может быть включен или выключен. Модификаторы включения / выключения могут быть представлены перечислением с флагами, а «нормальный» ключ может быть представлен отдельным перечислением. Оба перечисления могут содержаться в классе.

Перечисление System.Windows.Forms.Keys может использоваться как оба перечисления. Вы можете хранить два числовых значения (одно для модификаторов, одно для «обычного» ключа) - базовые значения перечисления - и они будут представлять комбинацию. Нет необходимости хранить строки.

Если вы используете строки для этой цели, вам нужно лучше определить свои ограничения. В ваших правилах не указано, как «Shift + Other» является недействительным, а «Shift + F». В любом случае, для этого можно отделить строку с помощью «+» (при условии, что это всегда разделитель), а затем сравнить каждую часть со списком допустимых значений, который, очевидно, содержит «Shift», «Alt», « Контроль »и все отдельные буквы.

0 голосов
/ 28 ноября 2010

Я думаю, что было бы легче разбить строку на сегменты, а затем перебрать список слов, а затем сравнить с тем, какие слова должны существовать. Это в C #, но я думаю, вы могли бы понять это.

C #:

        string text = "Shift+Control+Alt+Other";
        string[] textSegments = text.Split('+');
        string[] allowedWords = { "Alt", "Shift", "Control" };
        foreach (string t in textSegments)
        {
            bool temp = false;

            foreach (string t2 in allowedWords)
            {
                if (t == t2)
                {
                    temp = true;
                    continue;
                }
            }

            if (!temp)
            {
                MessageBox.Show("Wrong!");
            }
            else
            {
                MessageBox.Show("Right!");
            }


        }

На выходе будет 4 MessageBoxes, отображающих: «Верно!» "Правильно!" "Правильно!" "Неправильно!"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...