Страница: 1 | 
		
		 
			   
			 
			 
			 
			 Страница: 1 | 
 
			
 
  
		
     
  
    
Вопрос: Выделение всех элементов LisView
     
    
Добавлено: 25.03.09 15:45
     
      
  
				
			  
					 
			
				 
    
		
       
    
Автор вопроса:  
    
 fluke | ICQ: 318170731 
      
       
  
Есть ListView в виртуальном режиме. как выделить все элементы в списке?. ListView.SelectedIndices.Add("Index") и ListView.Items("Index").Selected = True, по причине низкой производительности, не подходит.
 
    
				
		
		
					 
			
				 
  
		
     
  
    
Ответы
     
    
Всего ответов: 12
     
      
  
		
	  
			 
	
		 
    
       
    
Номер ответа: 1 
      
Автор ответа:
 Aston
![]()
![]()
![]()
ICQ: 214-179-991 
Вопросов: 42
Ответов: 272
      
 Профиль |  | #1
       
Добавлено:  25.03.09 20:45
       
    
       
  
Если честно, а есть другой способ? Я выделение сделал так.
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 2 
      
Автор ответа:
 fluke
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
ICQ: 318170731 
Вопросов: 15
Ответов: 96
      
 Профиль |  | #2
       
Добавлено:  25.03.09 23:57
       
    
       
  
Нет, этот вариант не подходит, ListView в виртуальном режиме, а следовательно свойство Items, заблокировано. Даже если не юзать VirtualMode, перебор большого списка в цикле, уйдет в ступор.. 
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 3 
      
Автор ответа:
 Aston
![]()
![]()
![]()
ICQ: 214-179-991 
Вопросов: 42
Ответов: 272
      
 Профиль |  | #3
       
Добавлено:  26.03.09 00:38
       
    
       
  
А какова основная цель виртуального листвьюв. Если перегнать данные с него в двухмерный массив допусти ил во что то более гипкое?
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 4 
      
Автор ответа:
 fluke
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
ICQ: 318170731 
Вопросов: 15
Ответов: 96
      
 Профиль |  | #4
       
Добавлено:  26.03.09 10:11
       
    
       
  
Более гибкое ListView, интересно что? То что он может выделять все элементы, причем без перебора всех элементов, можно судить из реакции на нажатие клавиш (Home, Shift+End). 
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 5 
      
Автор ответа:
 mc-black
![]()
![]()
ICQ: 308-534-060 
Вопросов: 20
Ответов: 1860
      
 Web-сайт:  
 Профиль |  | #5
      
Добавлено:  26.03.09 12:21
       
    
       
  
Надо отправить этому ListView сначала Home, Потом Shift+End:
 
    
How to: Simulate Mouse and Keyboard Events in Code (.NET)
http://msdn.microsoft.com/en-us/library/ms171548(VS.80).aspx
		
	  
			 
	
		 
    
       
    
Номер ответа: 6 
      
Автор ответа:
 fluke
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
ICQ: 318170731 
Вопросов: 15
Ответов: 96
      
 Профиль |  | #6
       
Добавлено:  26.03.09 12:53
       
    
       
  
Пробовал, но не то. Вот к примеру, список из 10 тыс. активный элемент где-то в середине, я отправляю клавишу Home, список прокручивается в начало, потом Shift+End, список прокручивается в конец, и наконец делаю опять активным элемент, выбранный до этого. Что из этого получается, я думаю рассказывать не стоит. Для VB6.0 нарыл пример отправки сообщения элементу ListView 
 
    
Call SendMessage(ListView1.hwnd, LVM_SETITEMSTATE, -1, LV), и как утверждает автор, работает. Но в .Net, не катит
		
	  
			 
	
		 
    
       
    
Номер ответа: 7 
      
Автор ответа:
 fluke
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
ICQ: 318170731 
Вопросов: 15
Ответов: 96
      
 Профиль |  | #7
       
Добавлено:  26.03.09 12:55
       
    
       
  
Или я что-то не то делаю. Но если с помощью клавиш, это сделать можно, то по логике вещей, это можно сделать и без отправки клавиш, но как?
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 8 
      
Автор ответа:
 mc-black
![]()
![]()
ICQ: 308-534-060 
Вопросов: 20
Ответов: 1860
      
 Web-сайт:  
 Профиль |  | #8
      
Добавлено:  26.03.09 16:10
       
    
       
  
 
    
Не катит потому, что неуправляемый код или потому, что не вписывается в твой стандарт оформления кода? Вообще-то должно работать, как утверждается в MSDN Library:
Parameters
i       Index of the list-view item. If this parameter is -1, then the state change is applied to all items.
pitem   Pointer to an LVITEM structure.
		
	  
			 
	
		 
    
       
    
Номер ответа: 9 
      
Автор ответа:
 mc-black
![]()
![]()
ICQ: 308-534-060 
Вопросов: 20
Ответов: 1860
      
 Web-сайт:  
 Профиль |  | #9
      
Добавлено:  26.03.09 16:18
       
    
       
  
P.S. Можешь сделать класс-обертку к этому вызову, чтобы в дальнейшем не загружать себя этим вопросом, просто использовать готовый программный блок по работе с ListView.
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 10 
      
Автор ответа:
 fluke
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
ICQ: 318170731 
Вопросов: 15
Ответов: 96
      
 Профиль |  | #10
       
Добавлено:  26.03.09 19:54
       
    
       
  
Все разобрался, всем спасибо за помощь
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 11 
      
Автор ответа:
 mc-black
![]()
![]()
ICQ: 308-534-060 
Вопросов: 20
Ответов: 1860
      
 Web-сайт:  
 Профиль |  | #11
      
Добавлено:  27.03.09 13:08
       
    
       
  
Всегда пожалуйста. Над интересным вопросом интересно подумать. Хоть и решение ты нашел сам. Разреши поинтересоваться, для чего все это, что за программку вы создаешь, fluke?
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 12 
      
Автор ответа:
 fluke
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
ICQ: 318170731 
Вопросов: 15
Ответов: 96
      
 Профиль |  | #12
       
Добавлено:  27.03.09 15:10
       
    
       
  
Пишу я не прогу, а дополнение к существующей программе (бухучет). Дополнение работает с базой данных, конечно можно использовать DataView в нем даже Ctrl+A реализован, но мне больше нравиться ListView, который и использую для отображения 100-500 записей, но иногда необходимо и пару тысяч отобразить. Естественно тока VirtualMode. Но стандартный механизм управления состоянием Item-мов, для такого количества записей не подходит.