Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> удаление элементов в TreeView и ListBox 
:(
    Опции темы
Delphiec
Дата 5.8.2010, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 28.7.2010
Где: Россия

Репутация: нет
Всего: нет



привет всем!
такая проблема:
делаю помощника в котором TrееView  и ListBox. файлы (не папки) заносимые и сохраненные в TreeView отражаются в ListBox.
при удалении выделенного элемента в TreeView должен удалятся соответствующий элемент и в ListBox.
но у меня так не получается, в ListBox  удаляется выделенный элемент.
как сделать чтобы в ListBox удалялся именно соответствующий TreeView элемент?

код такой 

Код

//------------------------ удаляем элемент ---------------------------


procedure TForm1.SpeedButton6Click(Sender: TObject);
 var k: integer;
begin

if TreeView1.Selected <> nil then                // если дерево выделено
begin
if TreeView1.Selected.HasChildren then     // если имеются дети
begin
for k:= 0 to TreeView1.Items.Count - 1 do                            // то идет цикл по всем элементам дерева чтобы удалить вложенные файлы
                                                                                                                                               
DeleteFile('а3\' + TreeView1.Items.Item[k].Text + '.txt');

end

else
DeleteFile('а3\' + TreeView1.Selected.Text + '.txt');    // удаляю файл в каталоге (а3)

TreeView1.Items.Delete(TreeView1.Selected);       // удаляю эл. дерева
ListBox1.Items.Delete(ListBox1.ItemIndex);           //   удаляю эл. ListBox  (думаю  ошибка тут)
Memo1.Lines.Clear;
end

else
showmessage('а че удалять то? ');
end;


в коде еще есть  проблма с удалением вложенных файлов
если в TreeView папок нет  (т.е. эл. дерева = эл. ListBox = имя файла), то все нормально,
но если файл в TreeView  вложен в папки, то цикл (в коде) удаляет все сохраненные файлы в каталоге (а3).

помогите пожалста разобраться с этим.
может перепишите по другому код.   smile 
заранее спасибо   
PM MAIL   Вверх
Чoо
Дата 16.8.2010, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 22.9.2009

Репутация: нет
Всего: 4



Код

ListBox1.Items.Delete(ListBox1.ItemIndex);           //   удаляю эл. ListBox  (думаю  ошибка тут)

ошибка тут. А если ни один элемент не выделен, то вообще ни чего не удаляется с листбокса? smile
вобщем, думаю лучше было бы сделать следующим образом:
Перед тем, как удялять узел в дереве TreeView получаем имя файла из него, затем ищем это имя в листбоксе и удаляем его
Код

  i:=0;
  find:=FALSE;
  while (i<ListBox1.Items.Count) and (not find) do 
    if ListBox1.Items[i]=FileName then begin
      find:=TRUE;
      ListBox1.Items.Delete(i);
    end
    else inc(i);



А затем удаляем и элемент в TreeView. 
по самому коду: пользуйтесь отступами, читаемость кода повышается в несколько раз

Это сообщение отредактировал(а) Чoо - 17.8.2010, 00:00


--------------------
user posted image

OS: Debian Squeeze (kernel 3.8.2)
IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2
PM MAIL   Вверх
Чoо
Дата 17.8.2010, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 22.9.2009

Репутация: нет
Всего: 4



Delphiec,  честно говоря лень ковырять TreeView, я этим компонентом ни разу не пользовался (вместо него использую VirtuelTreeView) поэтому полностью подправить код не могу.
Ну а так, прочитайте комментарии в коде, может помогут:
Код

var
 k: integer;
 find:boolean;
begin
  if TreeView1.Selected <> nil then                // если дерево выделено
  begin
    if TreeView1.Selected.HasChildren then     // если имеются дети
      for k:= 0 to TreeView1.Items.Count - 1 do                            // то идет цикл по всем элементам дерева чтобы удалить вложенные файлы
        DeleteFile('а3\' + TreeView1.Items.Item[k].Text + '.txt')
        {^^а почему удаляем из директории а3? я так понимаю, все дочерние
        элементы прнадлежат директории, указанной в родительском узле?
        так же вопрос:
          мы должны получать имена файлов, хранящикся в дочерних элементах
          TreeView1.Selected?}
    else
      DeleteFile('а3\' + TreeView1.Selected.Text + '.txt');    // удаляю файл в каталоге (а3)

    k:=0;
    find:=FALSE;
    while (i<ListBox1.Items.Count) and (not find) do
      if ListBox1.Items[k]=TreeView1.Selected.Text + '.txt' then begin
        find:=TRUE;
        ListBox1.Items.Delete(k);
      end
      else inc(k);
    TreeView1.Items.Delete(TreeView1.Selected);       // удаляю эл. дерева
    Memo1.Lines.Clear;
  end
  else
    showmessage('а че удалять то? ');
end;

(не пойму, почему в опере синтаксис не подсвечивается)

Это сообщение отредактировал(а) Чoо - 17.8.2010, 00:31


--------------------
user posted image

OS: Debian Squeeze (kernel 3.8.2)
IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0799 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.