確かに、私はここで非常に明白で単純なものを見落としていますが、それを見ることはできません.
ツリービューがあり、実行時にノードが追加され、削除することもできます。ノードを削除すると、ツリーに選択したノードがなくなり、HideSelection も False に設定されますが、選択したノードが削除されるため、違いはありません。標準的な動作だと思います。
とにかく、ツリービューに戻って焦点を合わせる必要がある回数と入力を減らすために、ツリー内のノードが削除された後に自動的に再選択したいと考えています (クリックする必要がなくなるため、多くのノードをすばやく連続して削除する場合に特に便利です)ツリービューに戻ります)。
だから私はこのような木を持っているとしましょう:
これは、次のシナリオを例として使用して、私が探している動作パターンです。
Item1
削除するRoot
と選択できます。Item2
削除するItem6
と選択できます。Item3
削除するItem4
と選択できます。Item4
削除するItem5
と選択できます。Item5
削除するItem4
と選択できます。Item5
が存在しない場合に削除する場合Item4
は、Item3
選択する必要があります。Item5
選択できた場合、Item3
またはItem4
存在しない場合に削除する場合は、 を選択しますItem2
。Item6
削除するItem2
と選択できます。Item7
削除するItem6
と選択できます。
インデックスが範囲外になり、その他の AV エラー (Lazarus で) が発生し続けますが、現在選択されているノードがツリー内のどこにあるかを確認することさえできません。
現在のところ、私の削除イベントには次のものがあります。
procedure TMainForm.actDeleteExecute(Sender: TObject);
var
SelNode: TTreeNode;
begin
if TreeView1.Selected <> nil then
begin
SelNode := TreeView1.Selected;
TreeView1.Selected.Delete;
TreeView1.SetFocus;
//ShowMessage(SelNode.GetPrev.Text);
TreeView1.Selected.Index := SelNode.Index;
end;
end;
これは私が状況を完全に誤解し、タスクを不必要に難しくしているケースですか、それともそのような動作を実装するために多くの作業が必要ですか?
よろしくお願いします。