Класс TStringList

   
На этом шаге мы рассмотрим свойства, методы и события класса
TStringList.

   
Этот класс объединяет в себе свойства TStrings и TList
простейшим способом:
указатель на объект и соответствующая строка объединяются в запись,
указатель на которую
хранится в списке. В классе переопределены многие виртуальные
методы TStrings: Add,
Clear, Delete, Exchange, IndexOf, Insert. Он является полностью
функциональным: можно
создавать экземпляры TStringList в своей программе для работы с
наборами строк и объектов
(помимо тех, которые уже есть в компонентах).

   
Перечислим новые возможности этого класса:

  • сортировка строк в списке;
  • запрещение хранения дубликатов строк;
  • реакция на изменение содержания списка.

   
Кроме унаследованных от TStrings,
определены дополнительно следующие полезные свойства.

  • property Sorted: Boolean; - указывает, должны ли строки в списках
    автоматически сортироваться по алфавиту.
  • property Duplicates: TDuplicates;
    TDuplicates = (dupIgnore, dupAccept, dupError); - свойство определяет, что
    происходит при попытке добавить в список дубликат уже имеющейся строки:
  • dupIgnore - добавление игнорируется (отклоняется);
  • dupError - добавление приводит к созданию исключительной
    ситуации EListEiror;
  • dupAccept - одинаковые строки разрешены. В этом
    случае при поиске в не отсортированном списке
    не определено, которая из строк будет найдена первой.
  • property OnChange: TNotifyEvent;
    property OnChanging: TNotifyEvent; - два свойства, предусмотренные для
    определения пользователем своей
    реакции на изменение данных. Событие OnChanging вызывается во
    многих рассмотренных выше
    методах до внесения первого изменения, OnChange - после последнего.
  •    
    Кроме унаследованных от TStrings,
    определены дополнительно полезные методы.

  • function Find (const S: string; var Index; Integer): Boolean; - метод ищет в
    наборе строку S и в
    случае успеха возвращает результат True, а в параметре Index -
    ее индекс.
  • procedure Sort; - метод осуществляет сортировку списка. Попытка
    добавить или вставить элемент в отсортированный список
    вызывает исключительную ситуацию EListError. В этом случае до
    выполнения добавления свойству
    Sorted нужно присвоить значение False.
  •    
    Приведем пример приложения, где используются компоненты класса
    TStringList.
    Внешний вид приложения показан на рисунке 1:


    Рис.1. Внешний вид приложения

       
    На форме расположен компонент TMemo, который используется для
    отображения
    списка. Компонент TEdit предназначен для размещения строки, которая
    затем
    добавляется в список. Обратите внимание, что после сортировки списка, его
    необходимо
    снова отобразить в компоненте TMemo.

       
    Приведем тексты обработчиков событий:

    Unit Un_23_1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        Memo1: TMemo;
        Edit1: TEdit;
        Label1: TLabel;
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Label2: TLabel;
        Label3: TLabel;
        Button4: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure FormActivate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
      List: TStringList; //Указатель на список.
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      List:=TStringList.Create; //Создание списка.
    end;
    
    //Обработчик события добавления строки в список.
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       List.Append(Edit1.Text); //Добавление строки в список.
       Edit1.Text:=''; //Очистка строки.
       Edit1.SetFocus; //Передача фокуса.
    end;
    
    //Обработчик события заполнения компонента TMemo.
    procedure TForm1.Button2Click(Sender: TObject);
    var
      k: Integer;
    begin
       Memo1.Lines.Clear; //Очистка TMemo.
       for k:=0 to List.Count-1 do
         Memo1.Lines.Add(List.Strings[k]);
    end;
    
    procedure TForm1.FormActivate(Sender: TObject);
    begin
       Edit1.SetFocus; //Передача фокуса.
    end;
    
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
       List.Free; //Уничтожение списка.
    end;
    
    //Поиск заданной строки в списке.
    procedure TForm1.Button3Click(Sender: TObject);
    var
      Index: Integer;
    begin
      if List.Find(Edit1.Text, Index) Then //Есть такая строка.
         Label3.Caption:=' '+IntToStr(Index)
      else //Неуспешный поиск.
         Label3.Caption:=' Такой строки нет!!!';
    end;
    
    procedure TForm1.Button4Click(Sender: TObject);
    begin
        List.Sort; //Сортировка списка.
    end;
    
    end.
    

       
    Текст этого примера можно взять здесь.

       
    На следующем шаге мы рассмотрим состав класса TStream.



    Вы можете оставить комментарий, или Трекбэк с вашего сайта.

    Оставить комментарий