Editarea unei arhivări

Editarea TreeView

Spuneți-mi, vă rog, cum să prindeți evenimentul de anulare a editării numelui nodului TreeView, când același nume nu a fost schimbat?

în OnEditing rețineți, în comparație OnEdited

Problema este că dacă apăsați pe Esc imediat după editare, evenimentul OnEdited nu va fi procesat deloc.
Pentru claritate, vă voi da o sarcină pe care trebuie să o rezolv:
În TreeView, meniul contextual creează un nod slave numit "New Group" și oferă imediat editarea. Dacă utilizatorul își schimbă numele, nodul rămâne, iar dacă nu, este șters. Când schimbați numele, este într-adevăr manipulat de OnEdited, iar când faceți clic pe Esc, nu este.

Dacă pentru OnEditing nu există pereche OnEdited, atunci.

procedura TForm1.TreeView1Edited (expeditor: TObject; nod: TTreeNode;
var S: șir);
începe
TreeView1.Tag: = 0;
se încheie;

procedura TForm1.TreeView1CustomDrawItem (expeditor: TCustomTreeView;
Nod: TTreeNode; Statul: TCustomDrawState; var DefaultDraw: Boolean);
începe
dacă (TreeView1.Tag = 1) și (cdsFocused în stare) atunci
începe
TTreeView (expeditor) .items.Delete (Nod);
TreeView1.Tag: = 0;
DefaultDraw: = false;
se încheie;
se încheie;

procedura TForm1.TreeView1Editare (expeditor: TObject; nod: TTreeNode;
var AllowEdit: Boolean);
începe
TreeView1.Tag: = 1;
se încheie;

Stai puțin. O voi digera.

Totuși, probabil pe OnExit este necesar să se pună același control

Îmi este frică să suni enervant, dar
1) Ce este proprietatea Tag;
2) Și cum funcționează acest cod?

Tot aici este necesar:
procedura TForm1.TreeView1Exit (Expeditor: TObject);
începe
dacă (TreeView1.Tag = 1) atunci
începe
TreeView1.items.Delete (TreeView1.Selected);
TreeView1.Tag: = 0;
se încheie;
se încheie;

procedura TForm1.TreeView1Deletion (expeditor: TObject; nod: TTreeNode);
începe
TreeView1.Repaint;
se încheie;

Eticheta este setată la începutul ediției în 1. Dacă anulați sau opriți editarea, este setată la 0. Puteți utiliza orice variabilă globală.
CustomDraw apare când redrafli elemente. Verificăm dacă ediția a început (TreeView1.Tag = 1) și nu se leagă (cdsFocused în stare) și se șterge.
O altă resetare de editare poate apărea atunci când focalizarea iese din TreeView, deci aveți nevoie de un test pe OnExit.
Se pare că funcționează, dar probabil că există o cale și mai bună. Acesta este primul lucru care a venit în minte

Memorie: 0,73 MB
Durată: 0,024 secunde

Articole similare