TListView и TTreeView - Windows Explorer
|
Когда ваш компьютер говорит "Вставьте диск #2", не торопитесь, сначала выньте диск номер один... даже если вы уверены, что сможете засунуть туда оба.
|
У меня есть TTreeView и TListView, размещенные точно так же,
как это сделано в Windows Explorer (фактически я хочу им придать и то же
функциональное назначение). Как мне сделать следующее:
При двойном щелчке на элементе ListView узнать его индекс? Затем, как мне
'открыть' ветку и папку в компоненте TreeView, являющегося 'родителем' данного
элемента? (В точном соответствии с функциональностью Проводника, к этому моменту
родительский узел TreeView должен уже быть выбран - поэтому, я понимаю,
необходимо правильно определить дочерний узел - но я чего-то запутался в
синтаксисе).
Ниже приведен пример кода, показывающий как выбрать правильный узел дерева,
по которому произведен двойной щелчок.
Как вы можете здесь видеть, ключем здесь является функция NodeAtIndex. Данный
пример подразумевает наличие дочерних узлов и индексов, начиная с нуля. Так,
если мы подразумеваем что был выбран родительский узел списка элементов, (что
является безопасным предположением), то мы можем использовать данный узел как
отправной пункт. Методы GetFirstChild и GetNextSibling "отправляют" вас к
желаемому узлу.
function TFrmTipExplorer.NodeAtIndex(Index: Integer): TTreeNode;
var
I: Integer;
begin
Result := TreeView1.Selected.GetFirstChild;
for I := 0 to Index - 1 do
Result := Result.GetNextSibling;
end;
procedure TFrmTipExplorer.ListView1DblClick(Sender: TObject);
begin
TreeView1.Selected.Expand(False);
{ Выбираем узел дерева, соответствующий "щелканному" элементу списка }
NodeAtIndex(ListView1.Selected.Index).Selected := True;
end;
|
|