Страница: 1 | 
		
		 
			   
			 
			 Приветствую. Есть ListView с возможностью множественного выбора. Для подсчета количества выделенных итемов отслеживаю событие Item Click (приведено ниже). Проблема в том что при выделении с нажатым Shift достаточно большого количества итемов о-о-очень сильно тормозит (отрабатывается как кликнутый каждый итем между стартовым и кликнутым). Как посчитать выделенные по-другому? Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)     Dim i As Long          numSelect = 0     For i = 1 To ListView1.ListItems.Count         If ListView1.ListItems.Item(i).Selected Then             numSelect = numSelect + 1         End If     Next     label1.Caption = "Select " + Str(numSelect) End Sub Заранее благодарен. Юрий кузьмин 
			 
			 По клику мыши не нужно ничего делать, наверняка после выдается команда что с выделением делать. По команде проверяй выделенные элементы и обрабатывай. В том и дело что не нашел никакой команды _после_выделения. Вот все доступные события для ListView: AfterLabelEdit BeforeLabelEdit Click ColumnClick DblClick DragDrop DragOver GotFocus ItemCheck ItemClick KeyDown KeyPress KeyUp LostFocus MouseDown MouseMove MouseUp OLECompleteDrag OLEDragDrop OLEDragOver OLEGiveFeedback OLESetData OLEStartDrag Validate Окончание выбора фиксируется нажатием кнопки, командой меню, ведь так. Просто выбрать набор и на этом останавливаться смысла не имеет. Вот когда заканчивается выбор, тогда единожды и проверяй что выбрал пользователь. Или я чего-то не понимаю, или не так. Чтобы было понятнее приведу пример -- окно проводника. Пользователь может кликом выбрать один файл, может с нажатым ctrl добавлять к выбору файлы, может с shift выбрать сразу несколько файлов -- в любом случае в статус-баре отображается количество выбранных. У меня список tiff и psd файлов с различной доп. информацией (разрешение, цветовая модель и т.д.). Необходимо так же выводить информацию о количестве выбранных файлов, и необязательно над ними будет выполняться какое-то действие по нажатию кнопки (в этот момент, как я понял, ты и предлагаешь подсчитывать), эта информация о количестве сама по себе ценна. Можно конечно завести кнопочку "Подсчитать количество выделенных", но это не очень изящно. Сейчас появилась одна идея, если получится напишу. Вот код для подсчёта выделенных items: Dim i As Integer Может сделать следующим образом: If Item.Selected = True then Count = Count + 1 Else Count = Count  - 1 Item - параметр события ItemClick >If Item.Selected = True then Count = Count + 1 Else Count = Count  - 1 >Item - параметр события ItemClick Если итем уже выбран и по нему кликнуть с ctrl, то выделение с него снимается, а событие ItemClick не наступает  Вот так работает с мышкой нормально, но shift-up/down (c клавиатуры) не работает: Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)     Dim i As Long          On Error GoTo finishSelect          If ListView1.SelectedItem <> "" Then     Else finishSelect:         numSelect = 0         For i = 1 To ListView1.ListItems.Count             If ListView1.ListItems.Item(i).Selected Then                 numSelect = numSelect + 1             End If         Next         label1.Caption = "Select " + Str(numSelect)     End If End Sub ListView1.SelectedItem -- выделенный итем с которого начинается выделение при нажатом shift, в остальных случаях и по окончании -- nothing Всем спасибо. Решение найдено. Все оказалось просто. Событие ItemClick отрабатывать вообще не нужно, а подсчет вести по Click и KeyUp. В этом случае все итемы перебираются только один раз на действие. '--------------------------------------------------------------- Private Sub ListView1_Click()     ShowNumSelected End Sub '--------------------------------------------------------------- Private Sub ListView1_KeyUp(KeyCode As Integer, Shift As Integer)     If KeyCode >= 33 And KeyCode <= 40 Then         ShowNumSelected     End If End Sub '--------------------------------------------------------------- Private Sub ShowNumSelected()     Dim i As Long     Dim numSelect As Long     numSelect = 0     For i = 1 To ListView1.ListItems.Count         If ListView1.ListItems.Item(i).Selected Then             numSelect = numSelect + 1         End If     Next     label1.Caption = "Select " + Str(numSelect) End Sub Страница: 1 | 
 
			
 
  
		
     
  
    
Вопрос: VB: подсчет выделенных в ListView                 
     
    
Добавлено: 17.06.03 06:21
     
      
  
				
			  
					 
			
				 
    
		
       
    
Автор вопроса:  
     Kuzmin
 Kuzmin
      
       
  
 
    
				
		
		
					 
			
				 
  
		
     
  
    
Ответы
     
    
Всего ответов: 8
     
      
  
		
	  
			 
	
		 
    
       
    
Номер ответа: 1 
      
Автор ответа: USA
 USA


Вопросов: 1
Ответов: 184
      
 Профиль |  | #1
       
Добавлено:  17.06.03 06:39
       
    
       
  
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 2 
      
Автор ответа: Kuzmin
 Kuzmin






Вопросов: 3
Ответов: 5
      
 Профиль |  | #2
       
Добавлено:  17.06.03 07:09
       
    
       
  
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 3 
      
Автор ответа: USA
 USA


Вопросов: 1
Ответов: 184
      
 Профиль |  | #3
       
Добавлено:  17.06.03 07:29
       
    
       
  
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 4 
      
Автор ответа: Kuzmin
 Kuzmin






Вопросов: 3
Ответов: 5
      
 Профиль |  | #4
       
Добавлено:  17.06.03 08:16
       
    
       
  
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 5 
      
Автор ответа: boevik
 boevik






Хранитель чата
ICQ: 137392264 
Вопросов: 8
Ответов: 557
      
 Web-сайт:  
 Профиль |  | #5
      
Добавлено:  17.06.03 08:17
       
    
       
  
 
    
Dim Counter As Integer
For i = 1 To ListView1.ListItems.Count
    If ListView1.ListItems(i).Selected Then Counter = Counter + 1
Next
Debug.Print Counter
		
	  
			 
	
		 
    
       
    
Номер ответа: 6 
      
Автор ответа: USA
 USA


Вопросов: 1
Ответов: 184
      
 Профиль |  | #6
       
Добавлено:  17.06.03 08:34
       
    
       
  
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 7 
      
Автор ответа: Kuzmin
 Kuzmin






Вопросов: 3
Ответов: 5
      
 Профиль |  | #7
       
Добавлено:  17.06.03 09:10
       
    
       
  
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 8 
      
Автор ответа: Kuzmin
 Kuzmin






Вопросов: 3
Ответов: 5
      
 Профиль |  | #8
       
Добавлено:  19.06.03 03:24