Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Один из элементов List<элемент> вызывает событие, как узнать его номер? Варианты: / 11 сообщений из 11, страница 1 из 1
19.08.2013, 10:14
    #38370324
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один из элементов List<элемент> вызывает событие, как узнать его номер? Варианты:
Код: 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
19.08.2013, 10:28
    #38370338
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один из элементов List<элемент> вызывает событие, как узнать его номер? Варианты:
Ну варианта два.

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

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

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

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

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


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


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