Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Уроки по Visual C++ (MFC, платформа .NET)


Информационный Канал Subscribe.Ru

Уроки по Visual C++.NET. Рассылки сайта progs.biz
Рассылка № 76
 
Начало > Visual C++.NET > MFC > Урок 28

Алексей Дубовцев. Microsoft .NET. Наиболее полное руководство.
Алексей Дубовцев. Microsoft .NET. Наиболее полное руководство
Заказать на Озоне

Подробнее


Полные версии уроков (с картинками): урок 28.

Visual C++.NET
Урок 28. Удаление элементов из списка

Продолжаем нашу работу со списком.

На уроке 26 мы добавляли элементы в наш список. Сейчас же мы посмотрим, как элементы из списка можно удалять.

Для начала создайте диалоговое окно для определения, какой элемент из списка мы будем удалять. Имя класса для этого диалогового окна пусть будет CDeleteDlg. В окне создайте два edit'а для задания полей удаляемого элемента (как вы помните, в нашем списке типа CPtrList хранятся указатели на экземпляр класса CMyClass, в котором есть два поля - m_Data1 и m_Data2). Назначьте переменные к этим edit'ам - пусть они тоже называются m_Data1 и m_Data2.

Кроме того, добавьте пункт меню Delete для главного окна приложения - и в его обработчик добавьте следующий код:

void CtestmfcDoc::OnListDelete()
{
    // Показываем диалог для удаления.
    CDeleteDlg d;
    d.DoModal();
    
    CMyClass *p;
    // Получаем начало списка.
    POSITION pos = m_list.GetHeadPosition();
    // Пробегаем весь список.
    while(pos!=NULL)
    {
        //Берем очередной элемент.
        p = (CMyClass *)m_list.GetAt(pos);
        //Если нашли.
        if(p->m_Data1==d.m_Data1 && p->m_Data2==d.m_Data2){
            // То удаляем.
            m_list.RemoveAt(pos);
            // Освобождаем память.
            delete p;
            // Выходим.
            return;
        }
        // Если на нашли, то переходим на слудующий элемент.
        m_list.GetNext(pos);
    }
}

Действия тут стандартные - пробегаем весь список в поисках кандидата на удаление. Обратите внимание, что метод RemoveAt удаляет элемент только из нашего списка, но сам элемент в памяти остается. Это сделано специально - так как, например, наш элемент может входить в несколько списков или мы после удаления из конкретного списка захотим прибавить наш элемент к какому-нибудь другому списку. Так как элемент в памяти остается, то мы должны удалить его сами вручную - что мы и делаем через оператор delete.

В том, что заданный элемент удалился из списка, мы сможем убедиться через метод, показывающий все элементы списка (его мы рассмотрели на прошлом уроке).

Рассылки сайта progs.biz
Visual C++, MFC
C# и .NET
VB.NET
Win API
C/C++
Delphi
Java
HTML, PHP, mySQL, WEB-дизайн
Flash MX new!
C++ Builder
Ассемблер
SQL Server
DirectX
Обзор книг
Обзор программ
Новости сайта progs.biz


PARKING.RU. Качественный ВИРТУАЛЬНЫЙ ХОСТИНГ на платформе Windows(r): поддержка NET, многофункциональная панель управления, аренда бизнес-приложений, сертифицированные специалисты. Управляемый ВЫДЕЛЕННЫЙ ХОСТИНГ на платформе Windows(r): производительные серверы, профессиональная поддержка, аренда ПО Microsoft(r), безопасность, гарантии. http://www.parking.ru


Копирование любых материалов сайта без разрешения авторов и владельцев сайта запрещено.
© 2002-2004 сайт progs.biz
© 2002-2004 Алексеев Игорь

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.lessonsfromai
Отписаться

В избранное