• Главная
  • Оглавление
  • Обратная связь
  • Лента 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;

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

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


Адрес заметки: http://fit-media.com/post_1197402793.html
Ваш комментарий к статье

 cod


Примечание:
Все поля обязательны для заполнения!
Введенный email не будет опубликован.
Адреса с http:// преобразуются в ссылки автоматически.
Для этого отделяйте их от текста ПРОБЕЛАМИ с обеих концов.
Теги запрещены.

Календарь

декабрь, 2007
пн вт ср чт пт сб вс
          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,01072 сек.
  • Память: 7 680 кБт
  • Статистика привратника
Copyright FIT-Media.com, © 2007-2010
Главная | Общее оглавление | Обратная связь | Правила блога | Лента RSS