У меня есть следующий код:
PictureBox[] ncards = GetPictures();
PictureBox[] ncards1 = GetPictures1();
for (int it = 0; it <= ncards.Length - 1; it++)
{
ncards[it].Click += Form1_Click1;
}
for (int it1 = 0; it1 <= ncards.Length - 1; it1++)
{
ncards1[it1].Click += Form1_Click;
}
Обработчик должен получить номер PictureBox'а, так как все боксы имеют один обработчик события, но sender.Name не работает. Есть идеи, товарищи?
Во всех обработчиках событий WinForms первым параметром идёт sender
, в котором содержится объект, у которого было вызвано событие. Он имеет тип object
потому сперва его нужно привести к нужному типу.
Сделать это можно разными способами, как уже написали в комментариях:
(PictureBox)sender
sender as PictureBox
Второй способ выглядит несколько изящнее. Но лучше использовать первый: в случае если каст не удастся (sender
не является PictureBox
) мы получим сообщение об ошибке в этой же строке. Во втором способе мы получим исключение NullReferenceException
где-то ниже по коду, в итоге будет сложнее найти источник проблемы.
Тип Control, являющийся родителем всех графических компонентов WinForms, имеет свойство Name
. При использовании дизайнера формы, в это свойство заносится то же имя, которое даётся переменной (полю).
Убедиться в этом можно, кинув какой-нибудь компонент на форму и открыв файл Form*.Designer.cs. В нём среди прочих будут строки наподобие
this.pictureBox1.Name = "pictureBox1";
При ручном создании контролов в коде нужно добавить аналогичную строку в свой код. После чего в обработчике события можно будет получить имя компонента из этого свойства.
На заметку: метод Find использует это же свойство для поиска.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Помогите имитировать клик, х2 клик, правый клик, CTRL+V в C#У меня программа голосовое управление, надо чтобы эти действия обезательно были
Был взят за основу код из ответа на SOНужно была доработка класса MessageHandlerAdapter чтобы в качестве базового типа была команда ICommand<IMessage>, но при...
Где можно найти полноценные примеры сверточных нейронных сетей для C# без применения сторонних библиотек?