Получить индекс управления в массиве элементов управления - PullRequest
2 голосов
/ 27 мая 2010

У меня есть массив TextBox

private TextBox[,] Fields = new TextBox[9, 9];

, и все текстовые поля имеют одно и то же TextChanged-событие

void Field_Changed( object sender, EventArgs e )

Есть ли способ получить индекс отправителя вМассив (без предоставления каждому TextBox своего собственного EventHandler)?

Ответы [ 5 ]

1 голос
/ 27 мая 2010
  1. Вам действительно нужен индекс, отправитель является ссылкой на экземпляр, который отправляет запрос.

  2. Если ответ на 1 - «да», вы можете поместить индекс в свойство 'Tag' текстового поля и затем запросить его.

  3. В качестве альтернативы вы можете искать в массиве экземпляр, соответствующий аргументу sender события.

1 голос
/ 27 мая 2010

Вам в значительной степени придется перебирать массив и проверять равенство ссылок в каждом текстовом поле.

Либо так, либо назначьте индекс тегу при вставке элементов управления в массив. Но это микрооптимизация не стоит того.

0 голосов
/ 27 мая 2010

Изучение членов массива может помочь.

Те, что вам особенно нужны, это IndexOf() методы. Есть несколько перегрузок. Выберите тот, который наилучшим образом соответствует вашим потребностям.

0 голосов
/ 27 мая 2010

Вы можете перебрать объекты и найти тот, чья ссылка равна отправителю:

for (int i = 0; i < 9; i++)
{
    for (int j = 0; j < 9; j++)
    {
        if (Object.ReferenceEquals(sender, Fields[i, j])) 
            Console.WriteLine(i + " " + j);
    }
}
0 голосов
/ 27 мая 2010

Попробуйте дать каждому текстовому полю свои Tag или Name при инициализации. Затем вы можете привести sender к TextBox и посмотреть любое из этих свойств.

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