Не могу сделать регулярное выражение для имени элемента управления - PullRequest
0 голосов
/ 29 января 2019

У меня есть несколько элементов управления Picturebox на формеМне нужно перебрать их и извлечь целое число в имени pictureBox.У меня есть следующий коэффициент, который работает с использованием текста, но не при использовании имени из элемента управления.

Работает:

    Regex rx = new Regex(@"[0-9]?[0-9].");
    for (int i = 0; i < pbControls.Count; i++)
    {
        Match m = rx.Match("pictureBox8");
        Console.WriteLine(m);
    }

Не соответствует:

    Regex rx = new Regex(@"[0-9]?[0-9].");
    for (int i = 0; i < pbControls.Count; i++)
    {
        Match m = rx.Match(pbControls[i].Name, 0);
        Console.WriteLine(m);
    }

Я даже пытался поместить имя pictureBox в строку.Строка записывается в консоль, но я все еще не получаю совпадение.

    Regex rx = new Regex(@"[0-9]?[0-9].");
    for (int i = 0; i < pbControls.Count; i++)
    {
        string s = pbControls[i].Name;
        Console.WriteLine(s);
        Match m = rx.Match(s);
        Console.WriteLine(m);
    }

Что я не понимаю в именах элементов управления и регулярном выражении?

1 Ответ

0 голосов
/ 29 января 2019

Попробуйте это:

private void button4_Click(object sender, EventArgs e)
{
    var regex = new Regex(@"pictureBox(?<num>\d+)");
    foreach (var ctrl in Controls)
    {
        if (ctrl is PictureBox pb)
        {
            if (regex.IsMatch(pb.Name))
            {
                Debug.WriteLine(pb.Name);
            }
        }
    }
}

Он записывает имена моих элементов управления "pictureBox1" и "pictureBox2", но не элемента управления "pictureBoxNoNumber".Вы можете получить число из соответствия регулярному выражению, используя имя "num" (хотя мой код не беспокоит).

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