powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Один из элементов List<элемент> вызывает событие, как узнать его номер? Варианты:
11 сообщений из 11, страница 1 из 1
Один из элементов List<элемент> вызывает событие, как узнать его номер? Варианты:
    #38370324
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
class картинка
{
   int Width;
   int Height
   public event EventHundler WidthChanged;
   // ...
   //прочая атрибутика конкретной картинки
}



Один из элементов List<картинка> вызывает событие, как узнать его номер в массиве? Варианты:
1. создать поле непосредственно в классе
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
class картинка
{
   int Width;
   int Height
   public event EventHundler WidthChanged;
   int НомерПоПорядку
   // ...
   //прочая атрибутика конкретной картинки
}


вне контекста массива не понятно, что это за поле. Также можно было бы создать классический object Tag, но не читаемо, что в нём находится. В общем, если никак не получится, то именно так и придётся делать.

1. вот именно каким-то таким я вижу решение (код, конечно, не рабочий)
Код: c#
1.
2.
3.
4.
5.
6.
...
var p = new List<картинка>();
for (int i = 0; i < Count; i++)
p[i].WidthChanged += new MyEventHandler(ШиринаОднойИзКартинокИзменена , i); //i - это номер элемента
...
void ШиринаОднойИзКартинокИзменена(int НомерЭлемента, sender, ....)


Это, конечно, новое слово в синтаксисе C#, но суть в том, чтобы узнать номер объекта на этапе обработки события, а сам объект о своём номере не знает. Или это не логично? Как в таких случаях обычно поступают?
...
Рейтинг: 0 / 0
Один из элементов List<элемент> вызывает событие, как узнать его номер? Варианты:
    #38370338
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну варианта два.

Или добавлять избыточность, где-то дополнительно хранить индекс картинки. Наверное, лучше в самой картинке. Тогда при изменении порядка картинок избыточность придётся актуализировать.

Или каждый раз искать индекс "на лету" через списокКартинок.IndexOf(картинка) . Тогда избыточночти не будет, но поиск может снизить производительность.

А зачем нужен индекс? Чтобы иметь доступ к следующей/предыдущей картинке? Если да - может попробовать направленный список?

Код: c#
1.
2.
3.
4.
5.
6.
class Картинка
{
    public Картинка СледующаяКартинка;

    public Картинка ПредыдущаяКартинка;
}


?
...
Рейтинг: 0 / 0
Один из элементов List<элемент> вызывает событие, как узнать его номер? Варианты:
    #38370357
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно просто найти этот элемент в списке или принципиально узнать его "номер"?
...
Рейтинг: 0 / 0
Один из элементов List<элемент> вызывает событие, как узнать его номер? Варианты:
    #38370370
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУНужно просто найти этот элемент в списке или принципиально узнать его "номер"?
Нужен именно номер, т.к. эти объекты визуализируются на форме и от того, как отобразится 5-й, зависит то, как отображать 6й,7й, ...
Грубо говоря, представь себе, что каждый объект - это столбец в таблице, у которой все колонки автоматически выравниваются по ширине таблицы. Если в таблице 7 колонок, ты уменьшаешь ширину 5-й, то 6-я и 7-я должны увеличиться пропорционально.
...
Рейтинг: 0 / 0
Один из элементов List<элемент> вызывает событие, как узнать его номер? Варианты:
    #38370388
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КИли каждый раз искать индекс "на лету" через списокКартинок.IndexOf(картинка) .
Да, я так думаю, что это именно то, что нужно!
Алексей КЧтобы иметь доступ к следующей/предыдущей картинке? Если да - может попробовать направленный список?
Не, необходим произвольный доступ
...
Рейтинг: 0 / 0
Один из элементов List<элемент> вызывает событие, как узнать его номер? Варианты:
    #38370478
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandМСУНужно просто найти этот элемент в списке или принципиально узнать его "номер"?
Нужен именно номер, т.к. эти объекты визуализируются на форме и от того, как отобразится 5-й, зависит то, как отображать 6й,7й, ...
Грубо говоря, представь себе, что каждый объект - это столбец в таблице, у которой все колонки автоматически выравниваются по ширине таблицы. Если в таблице 7 колонок, ты уменьшаешь ширину 5-й, то 6-я и 7-я должны увеличиться пропорционально.Ну то есть если изменился элемент списка, то надо весь список тупо перерисовать. Зачем при этом знать индекс изменившегося элемента?
...
Рейтинг: 0 / 0
Один из элементов List<элемент> вызывает событие, как узнать его номер? Варианты:
    #38370524
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandМСУНужно просто найти этот элемент в списке или принципиально узнать его "номер"?
Нужен именно номер, т.к. эти объекты визуализируются на форме и от того, как отобразится 5-й, зависит то, как отображать 6й,7й, ...
Грубо говоря, представь себе, что каждый объект - это столбец в таблице, у которой все колонки автоматически выравниваются по ширине таблицы. Если в таблице 7 колонок, ты уменьшаешь ширину 5-й, то 6-я и 7-я должны увеличиться пропорционально.
Всё-равно я не понимаю, зачем индекс знать. Если что-то изменилось, всегда можно найти по "идентификатору" элемента. Но если нужен индекс, кури IndexOf, как уже сказал Алексей.
...
Рейтинг: 0 / 0
Один из элементов List<элемент> вызывает событие, как узнать его номер? Варианты:
    #38370655
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНу то есть если изменился элемент списка, то надо весь список тупо перерисовать
Нет. Если изменился элемент списка, то остальные элементы списка (которые по индексу больше текущего) нужно также немного подредактировать. И только потом их все перерисовать.
...
Рейтинг: 0 / 0
Один из элементов List<элемент> вызывает событие, как узнать его номер? Варианты:
    #38370657
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЕсли что-то изменилось, всегда можно найти по "идентификатору" элемента.
Это к решению номер 1. Я хотел примерно так поступить (создать поле public object Tag), если не найду другого способа.
Но сделал всё-таки вот так:
МСУНо если нужен индекс, кури IndexOf, как уже сказал Алексей.
спасибо за помощь))
...
Рейтинг: 0 / 0
Один из элементов List<элемент> вызывает событие, как узнать его номер? Варианты:
    #38370731
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandskyANAНу то есть если изменился элемент списка, то надо весь список тупо перерисовать
Нет. Если изменился элемент списка, то остальные элементы списка (которые по индексу больше текущего) нужно также немного подредактировать. И только потом их все перерисовать.Ну найдёте Вы индекс при помощи IndexOf и толку?
Получится, что сначала будут перебраны элементы от первого, до того, что изменился, чтобы найти индекс. Потом будут перебраны элементы, у которых индекс больше текущего, чтобы немного их подредактировать.
То есть в итоге будут перебраны все элементы списка.
...
Рейтинг: 0 / 0
Один из элементов List<элемент> вызывает событие, как узнать его номер? Варианты:
    #38370912
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Индекс в большинстве случаев зло.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Один из элементов List<элемент> вызывает событие, как узнать его номер? Варианты:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]