Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Disabled TreeView в C# - как "подсветить" узел?  (Прочитано 17923 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« : 31-03-2009 11:51 » 

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

Любые предложения принимаются. От жирного текста, до выделения цветом текста или фона узла (node).

ps иконок нет; HideSelection=false

pps Можно простое средство, аналогичное Enabled=false, отрубающее все пользовательские операции с деревом - схлопывание, изменение выбраного узла и тд?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 31-03-2009 12:30 » 

Вариант такой: оставить все как есть и не запрещать дерево, а отключать ему TabStop и закрыть его сверху другим контролом.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #2 : 31-03-2009 12:41 » 

Ром, дерево должно быть видимо. Прозрачным контролом закрывать?


Пока вот чего сам надыбал:

_selectedNode.ForeColor = Color.Red;
_selectedNode.BackColor = Color.Yellow; // это не работает ваще!

Но есть проблемка. Это не работает, если узел был изначально выбран:


* treeSelection.gif (13.63 Кб - загружено 5403 раз.)
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 31-03-2009 12:53 » 

Я тебя просто не правильно понял сперва...

Можно ли как-то иначе показать путь, не в дереве?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 31-03-2009 13:11 » 

Изначальная ситуация такая как на 3-ем фрейме. Допустим Level1_2 выбран. Теперь к нему будет добавлен элемент допустим Level2_6. Альтернативный путь показать в принципе можно, но а) это не предусмотрено концепцией UI; б) надо будет приучать юзера "смотреть туда"; в) это просто некрасиво - выделение убирается (моргает).

В крайнем случае буду убирать выделение у дерева на время редактирования, подсвечивать цветом, а потом восстанавливать и убирать цвет. Но блин это же хвалёный ядрёный .NET, почему элементарные операции должны быть такими сложными. Почему я цвет текста могу менять, а фона нет? Почему нельзя оставить выделение a la HideSelection=false?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 31-03-2009 13:15 » 

Жень, ну что тут сказать... askbill@microsoft.com

Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #6 : 31-03-2009 13:37 » 

Да не говори. Вроде в некоторых моментах действительно, клёвая штука. Как всё просто, разумно и интуитивно понятно сделано. Маленький код многофункциональных код. А потом БАЦ!!! "Вторая смена! И прощайте родные учителя" (с) И главное же - мелочи, мелочи. И весь выигрыш по времени, уходит на поиск решения вот для таких мелочей.

У меня ща получается пару месяцев С# потом С++ столько же, потом наоборот... вот ща опять к до-диезу привыкаю.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 31-03-2009 13:39 » 

Просто для полноты информации. Потом водичку с эмоциями надо будет почистить.

Тут нашёл совет - запихнуть дерево в Panel, и вырубать её. Эффект такой же. Ничего не изменилось. А в TableLayoutPanel ещё хуже - там даже красного текста не видно в вырубленом состоянии.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #8 : 31-03-2009 13:40 » 

Наверно надо было вопрос в теме про холивар с .NEt задать. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 01-04-2009 03:23 » 

Наверно надо было вопрос в теме про холивар с .NEt задать. Ага
Джон, это будет слишком жестоко по отношению к NET Улыбаюсь

А не будет решением просто скрыть с экрана контрол ? А на его месте вывести фуфельный битмап с последним снимком дерева ?
Записан

sss
Специалист

ru
Offline Offline

« Ответ #10 : 01-04-2009 05:30 » 

Цитата: MSDN
ES_NOHIDESEL
Negates the default behavior for an edit control. The default behavior hides the selection when the control loses the input focus and inverts the selection when the control receives the input focus. If you specify ES_NOHIDESEL, the selected text is inverted, even if the control does not have the focus.
Записан

while (8==8)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #11 : 01-04-2009 08:51 » 

sss, это ты к чему?  А черт его знает...  Быть такого не может
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
sss
Специалист

ru
Offline Offline

« Ответ #12 : 02-04-2009 01:21 » 

Этот стиль изменяет поведение выделенного текста в контроле при потере фокуса. Если применен, потеря фокуса не снимает выделение с текста... Этот стиль для строки ввода. Для дерева он тоже есть. Может быть то же значение? Проверь...

P.S.: В VCL данный стиль запрограммирован в свойство дерева класса TTreeView и называется bool HideSelection. Может быть в классе дерева C# тоже есть подобное свойство?
Записан

while (8==8)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #13 : 02-04-2009 01:33 » 

sss, читай внимательно - мне надо подсветить не при потере фокуса, а при "выключении" контрола, те установки свойства Enabled=false

То про что ты говоришь я тоже уже написал, в C# это называется... Ага HideSelection=false

ps иконок нет; HideSelection=false
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #14 : 02-04-2009 01:38 » 

Собственно говоря я всё-таки сделал через попу стеклорезом. Как уже описАл выше. При вырубании контрола можно управлять цветом и стилем лэйбла узла.

Геммор заключается в том, что если на него установлен фокус, то тогда это не работает (как видно на анимации в последних двух фреймах). Поэтому я сохраняю выделенный узел, убираю выделение, вырубаю контрол и подсвечиваю лэйбл, при включении контрола делаю обратную операцию - восcтанавливаю выделение, цвет и убиваю фонт узла (свойство NodeFont = null;)

Может кто ещё чего присоветует...
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
sss
Специалист

ru
Offline Offline

« Ответ #15 : 02-04-2009 03:55 » 

Может не использовать Enabled? Блокировать сообщения к дереву от мыши и клавиатуры?
Записан

while (8==8)
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #16 : 02-04-2009 04:58 » 

Джон, ну а с битмапом то не получится ?
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #17 : 02-04-2009 09:00 » 

Лёш, да это тоже геммор. Если хорошенько подумать. Один только resize чего будет стоить. Каждый раз новый битмап рисовать? А если окошко уменьшится

Может не использовать Enabled? Блокировать сообщения к дереву от мыши и клавиатуры?

Да вот и я уже про это думал, собственно было одним из вариантов решения:

pps Можно простое средство, аналогичное Enabled=false, отрубающее все пользовательские операции с деревом - схлопывание, изменение выбраного узла и тд?

Но как их ВСЕ отловить чисто и компактно? Тоже геммор. Поиск в инете тоже больших результатов не дал. Самое заманчивое было с панелькой, но к сожалению не сработало.  Жаль Хотя "унутреннее" чутьё мне подсказывает, что копать надо в этом направлении. Ведь если контрол запихнуть в другой контрол, то в дизанере уже этот контрол уже не достать.
Хотя не исключено, что дизайнер работает несколько иначе. Тут у меня ещё маловато опыта.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #18 : 02-04-2009 13:04 » 

Просто чтобы логически подытожить (может для FAQ).

Начальством (они высоко витают и с волюнтаристской высоты на такие мелочи не обращают внимание) было введено доп. условие - "какого х.. ты с этой фигнёй так долго возишься?". Посему решение было одобрено - сделал подстветку текста с врЕменным снятием выделения в момент выключения, с последующим его восстановлением:

Код:

        private bool _disabledMode = false;
        private TreeNode _selectedNode = null;
       
        public bool DisabledMode
        {
            get
            {
                return _disabledMode;
            }
            set
            {
                _disabledMode = value;
                this.Enabled = !_disabledMode;

                if (_disabledMode)
                {
                    // highlight the selected item in disabled mode
                    _selectedNode = _editorTree.SelectedNode;
                    if (_selectedNode != null)
                    {
                            _notifyParent = false; // здесь и далее просто затычка для хэндлера AfterSelect
                            _editorTree.SelectedNode = null;
                            _notifyParent = true;
                            _selectedNode.ForeColor = Color.Blue;                           
                    }
                }
                else
                {
                    // reset highlighting on enable
                    if (_selectedNode != null)
                    {
                            _selectedNode.ForeColor = SystemColors.ControlText;
                            _notifyParent = false;
                            _editorTree.SelectedNode = _selectedNode; // restore selected node
                            _notifyParent = true;
                    }
                }
            }
        }

Ну и, если кому хочется, то можно ещё изменить стиль фонта узла:

Код:
Font font = new Font(SystemFonts.MessageBoxFont, FontStyle.Underline | FontStyle.Bold);
_selectedNode.NodeFont = font;

// восстанавливаем очень просто

_selectedNode.NodeFont = null;

Этот способ лучше выделения цветом, тк даже в том случае, если узел был изначально выделен, стиль сохраняется (в моём примере жирный подчёркнутый). Т.е. плясать с бубном выделением уже не нужно.



* ss1.gif (4.18 Кб - загружено 5263 раз.)
« Последнее редактирование: 02-04-2009 13:08 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #19 : 02-04-2009 18:51 » 

Джон, ШЬРЩ, это лучше цвета Улыбаюсь
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #20 : 03-04-2009 04:46 » 

"ШЬРЩ"?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #21 : 03-04-2009 04:55 » 

Рома новую фишку придумал, замена IMHO Отлично
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #22 : 03-04-2009 05:46 » 

Аааа. Я уже решил, что лучше всего ошарашить немчуру незнакомыми буквами, вот только Р в эту логику не вписывалось. Ага

Не, Ром, шефу цвет больше понравился. А подчёркивание он вобще не переваривает - оно ему старые добрые ХМЛовские линки напоминает.

зы С фонтом там ещё есть заморочка, не всякий "жирный" (bold) помещается в клиентскую зону лэйбла, а как её расширить я не нашёл. Короче в первой попытке двойка получилась обрезаной примерно наполовину.
« Последнее редактирование: 03-04-2009 05:48 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines