Как мне переместить несколько узлов одновременно в TJvTreeView? - PullRequest
1 голос
/ 24 февраля 2011

Когда вы выбираете несколько узлов JvTreeView и затем пытаетесь перетащить эти узлы, JvTreeView выбирает узел, который вы щелкнули, чтобы перетаскивать, вместо того, чтобы инициировать перетаскивание всех выбранных узлов.В итоге вы перетаскиваете только этот единственный узел.

Возможно ли перетащить несколько узлов в JvTreeView?Я использую Delphi 2007.

ОБНОВЛЕНИЕ: Как ни странно, если я удерживаю CTRL + SHIFT при перетаскивании элементов, я могу успешно перетащить их все.Есть идеи?

Ответы [ 2 ]

2 голосов
/ 24 февраля 2011

Предположим, MultiSelectStyle является значением по умолчанию [msControlSelect], тогда ответ на ваш вопрос будет 'вы не отпускаете управляющую клавишу, когда выбираете последний элемент и начинаете перетаскивать' .

Виновник в TJvTreeView.WMLButtonDown в JvComCtrls.pas. Там код проверяет, нажата ли клавиша Ctrl, когда TreeView является MultiSelect, и очищает все элементы и выбирает выбранный элемент, если клавиша Ctrl не нажата. Вместо этого он должен проверить, выбран ли выбранный элемент, и ничего не делать, если он есть.

Вы можете увидеть поведение нарушено без перетаскивания. Выделите несколько элементов и щелкните мышью на выбранном элементе. VCL TreeView не выбирает и не отменяет выбор, в то время как JVTreeView, напротив, отменяет выбор всех элементов и выбирает выбранный элемент.

1 голос
/ 24 февраля 2011

Да, конечно, я делаю это все время.

Конечно, Multi-Select должен быть True, и вам, возможно, придется взглянуть на MultiSelectStyle TTreeView.Это определяет, какой тип узлов может быть выбран одновременно.Например, если для msSiblingOnly установлено значение true, вы можете выбрать только братьев и сестер.

Используете ли вы dmAutomatic или dmManual.Если последнее, возможно, вы что-то делаете в событиях OnMouse *, что сводит на нет сделанный ранее множественный выбор.

...