Комплекс диктатора и WPF API
От: Baiker  
Дата: 19.08.24 14:57
Оценка:
Все вы знаете простейшую проперть у списковых контролов 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. Офигеть как удобно!
Отредактировано 19.08.2024 15:10 Baiker . Предыдущая версия . Еще …
Отредактировано 19.08.2024 15:06 Baiker . Предыдущая версия .
Re: Комплекс диктатора и WPF API
От: okon  
Дата: 03.11.24 02:29
Оценка:
B>PS
B>Почему так прикипает? Ну например, ваш selectedIndex (в смысле переменная в программе) может зависеть от какого-нть алгоритма Монте Карло, где на выходе целое 0...конецСписка, либо "-100". Т.е. имей разрабы мозг, это "-100" можно было бы смело присвоить в ListBox.SelectedIndex ; а вместо этого мы сначала будем вынуждены проверять, что < 0 и потом передавать -1. Офигеть как удобно!


Не знаю как там реализовано но вот пример почему именно -1 может быть.

Допустим есть массив который включает в том числе вариант не определено, в итоге получается a[SelectedIndex + 1] все что будет <-1 приведет к ошибке.
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Re[2]: Комплекс диктатора и WPF API
От: Baiker  
Дата: 12.11.24 00:58
Оценка:
Здравствуйте, 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??? Очевидно же, что юзерские данные валидируются контролом нещадно, поэтому либо выделяем один элемент по валидному индексу, либо... снимаем всё выделение! Логика проще пареной репы. Но не у макрософака.
Re: Комплекс диктатора и WPF API
От: Maniacal Россия  
Дата: 12.11.24 07:45
Оценка:
Здравствуйте, 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.
-или-
Указанный индекс больше или равен числу элементов в поле со списком.

https://learn.microsoft.com/ru-ru/dotnet/api/system.windows.controls.primitives.selector.selectedindex?view=windowsdesktop-8.0
Re[3]: Комплекс диктатора и WPF API
От: Pavel Dvorkin Россия  
Дата: 08.02.25 15:48
Оценка:
Здравствуйте, Baiker, Вы писали:

B>В том и прикол, что никакого массива нет. Есть контрол. Мы ему дали некий список из 10 элементов. И вот где-то в середине работы я получаю число для выделения элемента: либо -5, либо 0...9. Почему ListBox.SelectedIndex не может проглотить -5??? Очевидно же, что юзерские данные валидируются контролом нещадно, поэтому либо выделяем один элемент по валидному индексу, либо... снимаем всё выделение! Логика проще пареной репы. Но не у макрософака.


Хоть и поздно, но отвечу.

Для совместимости с winforms, которая в свою очередь базируется на Win API. А там сказано

Указывает отсчитываемый от нуля индекс выбранной строки. Если этот параметр имеет значение -1, в списке не будет выбора.

....

При возникновении ошибки возвращаемое значение будет LB_ERR.

которое и портируется в .NET как ArgumentException

https://learn.microsoft.com/ru-ru/windows/win32/controls/lb-setcursel

Почему сделали совместимо — думаю. понятно. Никому не хочется переделывать программу при переходе с Winforms на WPF
With best regards
Pavel Dvorkin
Re[2]: Комплекс диктатора и WPF API
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 08.02.25 16:00
Оценка:
Здравствуйте, Maniacal, Вы писали:

M>Забавно, что в русской версии документации по другому


M>

M>Исключения
M>ArgumentOutOfRangeException
M>Указанный индекс меньше или равен -2.
M>-или-
M>Указанный индекс больше или равен числу элементов в поле со списком.

M>https://learn.microsoft.com/ru-ru/dotnet/api/system.windows.controls.primitives.selector.selectedindex?view=windowsdesktop-8.0

Тогда получается всё логично, внутри индекс представляется целым беззнаковым, а std::size_t(-1) — этакий npos, с ним сравнивают, если равно — снимают выделение, потом делают if (idx>=list.size()) return LB_ERR;
Маньяк Робокряк колесит по городу
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.