Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.07.2015, 18:35   #1
Михаил Юрьевич
Форумчанин
 
Аватар для Михаил Юрьевич
 
Регистрация: 25.12.2007
Сообщений: 655
По умолчанию TListView - позволить выбирать только одну галочку Checkbox

Как в ListView при установленном Checkboxes отследить чикеты.
Нужно что бы можно было выбрать только один , как в RadioGroup
За частые поиски был забанен во всех известных
поисковых системах!
Михаил Юрьевич вне форума Ответить с цитированием
Старый 20.07.2015, 19:04   #2
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

Код:
Type
      TForm1 = Class(TForm)
            ListView1: TListView;
            Procedure FormCreate(Sender: TObject);
            Procedure ListView1Change(Sender: TObject; Item: TListItem; Change: TItemChange);
            Procedure ListView1Deletion(Sender: TObject; Item: TListItem);
      Private { Private declarations }
            ListView1CheckedItemIndex: Integer;
      Public { Public declarations }
      End;

.....

Procedure TForm1.FormCreate(Sender: TObject);
Begin
ListView1CheckedItemIndex:=-1;
End;

Procedure TForm1.ListView1Change(Sender: TObject; Item: TListItem; Change: TItemChange);
Begin
If ListView1CheckedItemIndex<0 Then
      If Item.Checked Then
            ListView1CheckedItemIndex:=Item.Index
      Else
Else
      If Item.Checked Then
            If Item.Index<>ListView1CheckedItemIndex Then
                  Begin
                  ListView1.Items.Item[ListView1CheckedItemIndex].Checked:=False;
                  ListView1CheckedItemIndex:=Item.Index;
                  End
            Else
      Else
            If Item.Index=ListView1CheckedItemIndex Then
                  ListView1CheckedItemIndex:=-1;
End;

Procedure TForm1.ListView1Deletion(Sender: TObject; Item: TListItem);
Begin
If Item.Index=ListView1CheckedItemIndex Then
      ListView1CheckedItemIndex:=-1;
If Item.Index<ListView1CheckedItemIndex Then
      Dec(ListView1CheckedItemIndex);
End;
Прошу переименовать тему как "TListView - позволить выбирать только одну галочку Checkbox".

Последний раз редактировалось ResourceSpace; 20.07.2015 в 19:28.
ResourceSpace вне форума Ответить с цитированием
Старый 20.07.2015, 19:37   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Если в твоем Делфи есть событие OnItemChecked, то можно попробовать так:
Код:
procedure TForm1.ListView1ItemChecked(Sender: TObject; Item: TListItem);
var i:integer;
begin
  with TListView(Sender) do begin
    i:=tag;
    if (tag>=0)and(tag<Items.Count) then
     Items[tag].Checked:=false;
    tag:=Item.Index;
	end;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.07.2015, 19:52   #4
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Если в твоем Делфи есть событие OnItemChecked, то можно попробовать так:
Код:
procedure TForm1.ListView1ItemChecked(Sender: TObject; Item: TListItem);
var i:integer;
begin
  with TListView(Sender) do begin
    i:=tag;
    if (tag>=0)and(tag<Items.Count) then
     Items[tag].Checked:=false;
    tag:=Item.Index;
	end;
end;
А если нету, то так:
Код:
procedure TForm1.ListView1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
 var
   Item: TListItem;
   ht: THitTests;
   i: integer;
 begin
  Item := ListView1.GetItemAt(x, y);
  ht := ListView1.GetHitTestInfoAt(x, y);
    if (Item <> nil) and (ht = [htOnStateIcon]) then
    begin
       with TListView(Sender) do begin
          i:=tag;
          if (tag>=0)and(tag<Items.Count) then
           Items[tag].Checked:=false;
          tag:=Item.Index;
        end;
      Item.Checked:= true;
    end;
 end;
end.
Iron Monk вне форума Ответить с цитированием
Старый 20.07.2015, 20:23   #5
Михаил Юрьевич
Форумчанин
 
Аватар для Михаил Юрьевич
 
Регистрация: 25.12.2007
Сообщений: 655
По умолчанию

Цитата:
Сообщение от Iron Monk Посмотреть сообщение
А если нету, то так:
Есть! Всем спасибо!
За частые поиски был забанен во всех известных
поисковых системах!
Михаил Юрьевич вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как поставить галочку в CheckBox в интернете? KompleviT Работа с сетью в Delphi 0 29.03.2014 00:57
Снять галочку у CheckBox Shouldercannon Общие вопросы Delphi 6 23.07.2010 20:39
Как правильно запретить писать в комбо-боксе. А только выбирать? TwiX Общие вопросы Delphi 2 02.06.2010 01:34
Убрать галочку с Checkbox Romanbl4 JavaScript, Ajax 3 05.11.2008 23:06
Снять галочку с CheckBox RIO Общие вопросы .NET 3 04.05.2008 22:39