Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Копирование выделеных строк из Listbox1 в Listbox2

Delphi , Компоненты и Классы , Списки

Копирование выделеных строк из Listbox1 в Listbox2

Автор: Black_phoenix
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> копирование выделеных строк из listbox1 в listbox2

Зависимости: Windows, SysUtils, Classes, Controls, StdCtrls
Автор:       Black_phoenix, Black_phoenix@rambler.ru, Almaty
Copyright:
Дата:        30 апреля 2003 г.
***************************************************** }

public

  function GetFirstSelection(List: TCustomListBox): Integer;
  procedure MoveSelected(List: TCustomListBox; Items: TStrings);
  procedure SetItem(List: TListBox; Index: Integer);

implementation

function tform1.GetFirstSelection(List: TCustomListBox): Integer;
begin
  for Result := 0 to List.Items.Count - 1 do
    if List.Selected[Result] then
      Exit;
  Result := LB_ERR;
end;

procedure tform1.MoveSelected(List: TCustomListBox; Items: TStrings);
var
  I: Integer;
begin
  for I := List.Items.Count - 1 downto 0 do
    if List.Selected[I] then
    begin
      Items.AddObject(List.Items[I], List.Items.Objects[I]);
      // List.Items.Delete(I); // можно оставить если вы хотите чтобы в 1 списке строки удалились
    end;
end;

procedure tform1.SetItem(List: TListBox; Index: Integer);
var
  MaxIndex: Integer;
begin
  with List do
  begin
    SetFocus;
    MaxIndex := List.Items.Count - 1;
    if Index = LB_ERR then
      Index := 0
    else if Index > MaxIndex then
      Index := MaxIndex;
    Selected[Index] := True;
  end;
end;

// Пример использования:
procedure TForm1.Button1Click(Sender: TObject);
var
  Index: Integer;
begin
  Index := GetFirstSelection(listbox1);
  MoveSelected(listbox1, listbox2.Items);
  SetItem(listbox1, Index);
end;

Перевод на русский язык:

Это фрагмент кода Delphi, демонстрирующий, как скопировать выбранные элементы из одного TListBox (Listbox1) в другой (Listbox2). Код включает три процедуры:

  1. GetFirstSelection: Функция возвращает индекс первого выбранного элемента в Listbox1.
  2. MoveSelected: Процедура копирует все выбранные элементы из Listbox1 в Listbox2, добавляя их к свойству Items Listbox2. Она также удаляет скопированные элементы из Listbox1 (комментарий).
  3. SetItem: Процедура устанавливает фокус на Listbox1 и выбирает элемент по конкретному индексу.

Код сопровождается примером использования в обработчике события Button1Click, который демонстрирует, как использовать эти процедуры для копирования выбранных элементов из Listbox1 в Listbox2.

Вот некоторые предложения по улучшению кода:

  • В GetFirstSelection вместо итерации над всеми элементами и проверки каждого на выборку можно использовать метод IndexOfSelected, предоставляемый TCustomListBox. Это сделает код более эффективным.
  • В MoveSelected можно использовать TStringList для хранения скопированных элементов вместо добавления их напрямую в свойство Items Listbox2. Это позволит иметь лучший контроль над процессом копирования.
  • В SetItem можно использовать метод ScrollIntoView, чтобы обеспечить видимость выбранного элемента в Listbox1.
  • Рассмотрите добавление обработки ошибок и валидации к процедурам, особенно если они будут использоваться в более сложном приложении.

Вот обновленная версия кода с этими предложениями:

function TForm1.GetFirstSelection(List: TCustomListBox): Integer;
begin
  Result := List.IndexOfSelected;
end;

procedure TForm1.MoveSelected(List: TCustomListBox; Items: TStringList);
var
  I: Integer;
begin
  for I := 0 to List.Items.Count - 1 do
    if List.Selected[I] then
    begin
      Items.AddObject(List.Items[i], List.Items.Objects[i]);
      // List.Items.Delete(I); // remove the item from Listbox1
    end;
end;

procedure TForm1.SetItem(List: TListBox; Index: Integer);
begin
  with List do
  begin
    ScrollIntoView(Index);
    Selected[Index] := True;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Index: Integer;
begin
  Index := GetFirstSelection(listbox1);
  MoveSelected(listbox1, listbox2.Items);
  SetItem(listbox1, Index);
end;

Обновленный код должен быть более эффективным и легче поддерживаемым.

Данная статья описывает программу на языке Delphi, которая позволяет копировать выделенные строки из Listbox1 в Listbox2.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Списки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-08 18:34:47/0.0039281845092773/0