Все вы знаете простейшую проперть у списковых контролов SelectedIndex. Отрывок из доков:
If you set SelectedIndex to a value less that -1, an ArgumentException is thrown.
If you set SelectedIndex to a value equal or greater than the number of child elements, the value is ignored.
Вот этот диктаторско-садистский метод разработки API — это у их погромиздов хроническое? В чём вообще смысл "ругаться" на SelectedIndex=-2 и проглатывать -1? Смысл-то один и тот же — "убери выделение любых элементов"! Причём с выходом за границы элементов (второй абзац) всё нормуль — как будто проектировал совсем другой человек, там невалидный индекс просто игнорируется (в отличии от идиотских капризов при работе с List<>).
То, что такое тупое важное поведение освещено в ремарках(!!), а не в (отсутствующей) секции "Exceptions" — отдельный просёр.
Чем-то разумным можно объяснить эти капризы разрабов? Там что, вся вселенная рухнет, если передать -2? Или этот говённый WPF так захардкожен "-1"-чками, что нельзя в сторону ступить?
Ты имеешь право быть диктатором и драконом, ограничивающим любые отклонения, но тогда уж КОНСИСТЕНТНЫМ! (т.е. везде одинаково строго) А делать там — строго, а тут на "отъявись" — признак безалаберной, неслаженной команды.
PS
Почему так прикипает? Ну например, ваш selectedIndex (в смысле переменная в программе) может зависеть от какого-нть алгоритма Монте Карло, где на выходе целое 0...конецСписка, либо "-100". Т.е. имей разрабы мозг, это "-100" можно было бы смело присвоить в ListBox.SelectedIndex ; а вместо этого мы сначала будем вынуждены проверять, что < 0 и потом передавать -1. Офигеть как удобно!
B>PS B>Почему так прикипает? Ну например, ваш selectedIndex (в смысле переменная в программе) может зависеть от какого-нть алгоритма Монте Карло, где на выходе целое 0...конецСписка, либо "-100". Т.е. имей разрабы мозг, это "-100" можно было бы смело присвоить в ListBox.SelectedIndex ; а вместо этого мы сначала будем вынуждены проверять, что < 0 и потом передавать -1. Офигеть как удобно!
Не знаю как там реализовано но вот пример почему именно -1 может быть.
Допустим есть массив который включает в том числе вариант не определено, в итоге получается a[SelectedIndex + 1] все что будет <-1 приведет к ошибке.
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Здравствуйте, okon, Вы писали:
B>>PS B>>Почему так прикипает? Ну например, ваш selectedIndex (в смысле переменная в программе) может зависеть от какого-нть алгоритма Монте Карло, где на выходе целое 0...конецСписка, либо "-100". Т.е. имей разрабы мозг, это "-100" можно было бы смело присвоить в ListBox.SelectedIndex ; а вместо этого мы сначала будем вынуждены проверять, что < 0 и потом передавать -1. Офигеть как удобно!
O>Не знаю как там реализовано но вот пример почему именно -1 может быть.
O>Допустим есть массив который включает в том числе вариант не определено, в итоге получается a[SelectedIndex + 1] все что будет <-1 приведет к ошибке.
В том и прикол, что никакого массива нет. Есть контрол. Мы ему дали некий список из 10 элементов. И вот где-то в середине работы я получаю число для выделения элемента: либо -5, либо 0...9. Почему ListBox.SelectedIndex не может проглотить -5??? Очевидно же, что юзерские данные валидируются контролом нещадно, поэтому либо выделяем один элемент по валидному индексу, либо... снимаем всё выделение! Логика проще пареной репы. Но не у макрософака.
Здравствуйте, Baiker, Вы писали:
B>Все вы знаете простейшую проперть у списковых контролов SelectedIndex. Отрывок из доков:
B>
B>If you set SelectedIndex to a value less that -1, an ArgumentException is thrown.
B>If you set SelectedIndex to a value equal or greater than the number of child elements, the value is ignored.
Забавно, что в русской версии документации по другому
Исключения
ArgumentOutOfRangeException
Указанный индекс меньше или равен -2.
-или-
Указанный индекс больше или равен числу элементов в поле со списком.
Здравствуйте, Baiker, Вы писали:
B>В том и прикол, что никакого массива нет. Есть контрол. Мы ему дали некий список из 10 элементов. И вот где-то в середине работы я получаю число для выделения элемента: либо -5, либо 0...9. Почему ListBox.SelectedIndex не может проглотить -5??? Очевидно же, что юзерские данные валидируются контролом нещадно, поэтому либо выделяем один элемент по валидному индексу, либо... снимаем всё выделение! Логика проще пареной репы. Но не у макрософака.
Хоть и поздно, но отвечу.
Для совместимости с winforms, которая в свою очередь базируется на Win API. А там сказано
Указывает отсчитываемый от нуля индекс выбранной строки. Если этот параметр имеет значение -1, в списке не будет выбора.
....
При возникновении ошибки возвращаемое значение будет LB_ERR.
которое и портируется в .NET как ArgumentException
Здравствуйте, Maniacal, Вы писали:
M>Забавно, что в русской версии документации по другому
M>
M>Исключения
M>ArgumentOutOfRangeException
M>Указанный индекс меньше или равен -2.
M>-или-
M>Указанный индекс больше или равен числу элементов в поле со списком.
Тогда получается всё логично, внутри индекс представляется целым беззнаковым, а std::size_t(-1) — этакий npos, с ним сравнивают, если равно — снимают выделение, потом делают if (idx>=list.size()) return LB_ERR;
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Хоть и поздно, но отвечу.
Дотнету 20 лет, так что никогда не поздно поделиться знаниями
PD>Для совместимости с winforms, которая в свою очередь базируется на Win API
эээ... ШТА?? Вообще не вижу ни малейшей причины что-то "совмещать" — это два абсолютно разных мира.
PD>Почему сделали совместимо — думаю. понятно. Никому не хочется переделывать программу при переходе с Winforms на WPF
Вообще не о том! Если у людей и были ВинФормсы, то WPF — это практически полная переделка проекта. А уж если код "завязан на -1", то это вообще говнокод.
В прикладном коде таких "спецзначений" не должно быть вообще.
Так или иначе, на FW4.8 WPF показывает полную безалаберность разрабов — выходы за нижнюю и верхнюю границы списка обрабатываются по-разному.