Diskuze: c# treeview smazat node
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj,
máš jistotu, že TreeView1.SelectedNodes opravdu něco obsahuje?
S TreeView nemám moc zkušeností, ale není potřeba při změně provést
nějaké překreslení (redrawing) nebo update stromu?
Pokud na něco přijdeš, dej vědět, rád se poučím.
Díky.
Ahoj, ano vím s jistotou, že v TreeView1.SelectedNodes něco najdu. To mám ošetřeno a ano potom se musí udělat update a refresh co jsem zatím byl schopen zjistit, ale já mám problém, že mi to spadne na chybu : "Zadanou položku nelze odebrat, protože položka nebyla v určené kolekci nalezena." Takže problém bude někde v tom, že nevím zda odstraňuji první úroveň nebo druhou a u toho vím s jistotou že více úrovní ani nebude.
Máš pravdu že standartní nemá, ale já využívám devcomponents a ten to má, ale nakonec jsem tomu ustoupil a prostě uživatel bude muset mazat po jednom. Jinak jsem to nakonec vyřešil tím, že mám následující kód:
Node node = treeview1.SelectedNode;
Node parents = node.Parent;
if (parents == null)
{
treeview1.Nodes.Remove(node);
}
else
{
parents.Nodes.Remove(node);
}
treeview.Update();
treeboew.Refresh();
s tímto mi to již funguje.
Jediný další problém mám v tom, že následně procházím kolekci, kde
se snažím smazat požadovaný výskyt a ten mi spadne na chybu, jelikož ten
první výskyt smažu, ale pro další průchod mi to napíše:
Kolekce byla upravena. Operace výčtu pravděpodobně nebude
spuštěna.
S tím si ale zatím nevím rady. Tak pokud by někdo věděl co je v tomto k=odu špatně, tak budu jedině rád:
foreach (var radek in _data)
{
if (string.IsNullOrWhiteSpace(druhy))
{
if (Piece.SharedTheFunction.DPiece(radek.Klic, "|", 1, "") != prvni) continue;
_data.Remove(radek);
continue;
}
if (radek.Klic != guids) continue;
_data.Remove(radek);
}
Chybu ti to hází, protože jsi upravil ve foreach kolekci _data metodou _data.Remove(radek), jak ti to píše visual studio. Aby jsi se tomu vyhnul, vytvoř si ještě jednu kolekci (třeba prvkyProSmazani) stejného datového typu jako _data. A místo:
_data.Remove(radek);
si radek vloz do druhe kolekce:
prvkyProSmazani.Add(radek);
Pak ji stačí projet foreachem a smazat prvky v _data:
foreach(var prvekProSmazani in prvkyProSmazani)
{
_data.Remove(prvekProSmazani):
}
Moc děkuji, udělal jsem to jak jsi psal a už je to v pořádku. mi to nedošlo, že je v tomto problém, ale nakonec to dává přeci jenom smysl
Je pěkné poděkovat, ale je také slušné označit řešení, aby bylo jasné, že je vše v pořádku, lidi mohli nejlepší odpověď (tedy řešení) použít a vlákno se uzavřelo
Zobrazeno 8 zpráv z 8.