Как исправить горизонтальные полосы прокрутки Winforms Treeview с узлами, нарисованными владельцем?

Я создаю пользовательское дерево winforms Treeview, которое полностью нарисовано владельцем. Когда текстовый узел, выделенный полужирным шрифтом, нарисован и выходит за пределы ширины древовидного представления, текст обрезается, поскольку горизонтальная полоса прокрутки не может прокручиваться дальше. Я предполагаю, что это как-то связано с жирным шрифтом, и он не может определить правильную ширину. Есть ли способ исправить полосу прокрутки, чтобы она могла прокручиваться полностью.


person John_Sheares    schedule 13.02.2013    source источник


Ответы (1)


Для этого нет чистого исправления, в родном элементе управления деревом Windows отсутствует сообщение типа «MeasureNode». Что потребуется, чтобы дать горизонтальной полосе прокрутки правильный диапазон, если вы нарисуете более широкую строку. Таким образом, неизбежно, что он по-прежнему основан на размере строки TreeNode.Text.

Для этого есть грязное исправление, оно работает, но неприятно. Вы делаете это, задавая свойству TreeNode.Text фальшивую строку, достаточно широкую, чтобы придать форму полосе прокрутки. И используйте, скажем, свойство Tag для хранения реальной строки, которую вы хотите нарисовать. Некрасивый, но эффективный хак. Неприятно, потому что вы не можете легко скрыть этот код.

person Hans Passant    schedule 13.02.2013
comment
Я боялся, что понадобится какой-то хак. Мне придется сказать пользователям элемента управления, чтобы они дополняли текст и сохраняли оригинал в теге узла. Совсем не красиво! - person John_Sheares; 14.02.2013