• Главная
  • Оглавление
  • Обратная связь
  • Лента RSS
  • Правила
Что здесь уже нашли

Залепа №1. Убогий TreeView.

11 декабря 2007, 14:53

Задача:

На форме лежит контрол TreeView. В качестве данных используется некий древовидный каталог, пункты которого в дереве будут отображаться так: "[15.06] Подшипники". Тут "15.06" - внутренний код раздела, после которого идет название раздела.

По дереву ползает юзер и может эти данные редактировать. Но изменять он может только название, а вот коды изменять ему нельзя. Т.е. программа должна позволить ему изменять только название.

Первое, что приходит на ум для реализации столь "сложного" поведения - это перехватить моменты начала и завершения редактирования узлов дерева с динамической подменой значений. Т.е. юзер щелкает по узлу, узел переходит в режим редактирования, при этом программа заменяет текст с "[15.06] Подшипники" на "Подшипники". Его-то юзер и изменяет например на "Валенки", затем жмет Enter (конец редактирования) и программа снова заменяет текст узла с "Валенки" на "[15.06] Валенки".

Вроде все просто, благо и события подходящие предусмотрены. Но (как всегда) есть одно "НО"....

Как бы действовала моя программа, работая в НОРМАЛЬНОЙ среде?

Она бы в обработчике TreeView.AfterLabelEdit сначала проверила корректность ввода, а потом аккуратно подменила бы текст "Валенки" на "[15.06] Валенки" и сообщила системе, что все в порядке. В результате пользователь бы получил именно то, что желает. Но, к нашему всеобщему сожалению, этого не происходит.

Проблема в том, что обработчики событий имеют одну малеееееенькую недоработку. А именно, свойство NodeLabelEditEventArgs.Label имеет статус "Read only", т.е. "только-для-чтения".

Давайте подумаем головой. Обработчик события TreeView.AfterLabelEdit предназначен для контроля пользовательского ввода, т.е. после того, как юзер ввел некий текст, наша программа анализирует его на "профпригодность" и выносит вердикт можно ли его допускать для дальнейшей работы или нет. Почему бы не дать возможность программе в этом обработчике не только просигналить пользователю о точ, что введенные данные неверны, но и попытаться самой исправить юзеровские ошибки и нормально продолжить работу?

Но тут мелко-мягкие (в очередной раз) решили, что все программисты в мире - дыбилы и не смогут предусмотреть некую реакцию, исправляющую положение. Именно поэтому они сделали это свойство неизменяемым. Других причин такому поведению я не вижу.

Кстати, финты ушами типа:

Пример кода:
TreeNode node = Tree.SelectedNode;
e.Node.EndEdit(false);
node.Text = "[" + it.FromattedCode + "] " + it.name;

тоже не проходят. Остается только тихонько матерясь делать редактирование в отдельном окне.

Вывод: ф топку такой контрол!

Оставить комментарий

Идея этого раздела

10 декабря 2007, 14:47

Описание откровенных глупостей и недоработок библитеки .NET, с которыми столкнется любой новичек.

Мой опыт программирования измеряется десятилетиями. За это время перепробовано множество систем, языков и библиотек. Последнее, с чем пришлось работать - VCL от Borland. Впечатления самые наилучшие - библиотека построена грамотно, интуитивно-понятна, проста в использовании....

Но время не стоит на месте. Теперь заказчики тоже стали грамотными. Если раньше им нужна была "программа, которая будет делать это и это", то теперь они хотят получить "программу, которая делает это и это и написана на ЭТОМ". Под ЭТИМ все чаще выступает .NET, причем ни один из заказчиков так и не смог привести вразумительного объяснения, почему именно .NET.

Я долго убегал от этого мега-новшества, но оно все же догнало меня и (как все грандиозные проекты от мелко-мягких) накрыло как волной. :( Что ж, делать нечего, пришлось изучать....

С моим опытом проблем в освоении новой системы никогда не возникает, была бы документация. Но, чем глубже я закапываюсь в .NET, тем всё больше и больше нахожу в ней откровенно глупых решений. Раздражает множество недоработок.

Вот собственно об этих залепах я и буду писать в разделе "Кривизна платформы .NET" этого блога.

Я не претендую на то, что написанное здесь - истина в последней инстанции - возможно я что-то упустил или не так понял, я же только изучаю эту платформу. И если Вы, уважаемые читатели, поможете мне открыть глаза на прелести .NET (которых я пока не увидел), то я Вам буду премного благодарен.

Хочу сразу сказать, что все, написаноое в этом блоге - это мои попытки побороть с помощью C# библиотеку .NET версии 2.0.50727. Возможно в более поздних эти залепы уже выровняли, но в этом я очень сильно сомневаюсь. Скорее там наделали "более других". :)

Оставить комментарий

Page: 22 23 24 25 26 27 28 29 30 31
Fast: 10 20 30

Календарь

май, 2012
пн вт ср чт пт сб вс
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Меню

  • Главная страница
  • Оглавление блога
  • Лента новостей
  • Обратная связь
  • Правила блога

Анонсы по темам

  • Все посты блога
  • С миру по нитке
  • Мысли вслух
  • Графика и фото
  • Кривизна платформы .NET
  • Грамотные интерфейсы
  • WEB-программирование
  • FlatCMS - шустрая и гибкая
  • Доработки Lasto-блога

Категории

  • Все посты по порядку
  • С миру по нитке
  • Графика и фото
  • Кривизна платформы .NET
  • Грамотные интерфейсы
  • WEB-программирование
  • FlatCMS - шустрая и гибкая
  • Доработки Lasto-блога

Сервисы

  • Поиск по блогу
  • Поиск по всему сайту
  • Шпионское досье

Реклама


Стоимость сайта

Мой вебсайт стоит 865 404,18 руб

Статистика

    Widgetize!
  • Время работы: 0,00894 сек.
  • Память: 3 072 кБт
  • Статистика привратника
Copyright FIT-Media.com, © 2007-2012
Главная | Общее оглавление | Обратная связь | Правила блога | Лента RSS