確かに、私はここで非常に明白で単純なものを見落としていますが、それを見ることはできません.
ツリービューがあり、実行時にノードが追加され、削除することもできます。ノードを削除すると、ツリーに選択したノードがなくなり、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;
これは私が状況を完全に誤解し、タスクを不必要に難しくしているケースですか、それともそのような動作を実装するために多くの作業が必要ですか?
よろしくお願いします。