Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Listview click Добавлено: 06.10.08 22:42  

Автор вопроса:  Dim22
У меня в форме два элемента Listview, можно сделать два события Click column, но хочу объединить в одно, а в sender и е прочитать какой столбец какого Listview сыграл. как это лучше обыграть ?

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 BG(Алексей)



Вопросов: 26
Ответов: 295
 Профиль | | #1 Добавлено: 07.10.08 02:26
Не совсем понял вопрос, но примерно так
  1.     Private Sub ListView_SelctedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView1.SelectedIndexChanged, ListView2.SelectedIndexChanged
  2.         Dim index As Integer = DirectCast(sender, ListView).FocusedItem.Index
  3.     End Sub

Ответить

Номер ответа: 2
Автор ответа:
 Dim22



Вопросов: 5
Ответов: 16
 Профиль | | #2 Добавлено: 07.10.08 17:40
Спасибо, попробую этот вариант.
Подробнее о вопросе, у меня в форме есть два элемента Listview, в каждом из-них по четыре столбца :
имя файла, дата, время, размер. у меня написана процедура для сортировки столбцов универсальная одна для всех видов столбцов и для любого Listview. я хотел, чтобы click столбцов был бы в одной процедуре события, которая бы скидывала в мою процедуру номер столбца и name Listview.

Ответить

Номер ответа: 3
Автор ответа:
 Сергей



ICQ: 558230345 

Вопросов: 7
Ответов: 91
 Профиль | | #3 Добавлено: 08.10.08 17:49
Не уверен, но мне кажется лучше сделать массив элементов Listview и тогда они отрабатываются одним событием. Только индексы массива надо подставлять.

Ответить

Номер ответа: 4
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #4 Добавлено: 08.10.08 18:42
Никаких массивов тут не нужно.. повесить 2 handler'a на одну процедуру и всего делов. В параметре sender будет ссылка на нужный Listview а во втором параметре все остальное.

Ответить

Номер ответа: 5
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #5 Добавлено: 08.10.08 19:00
  1.  
  2. using System;
  3. using System.Windows.Forms;
  4.  
  5. namespace WindowsFormsApplication1
  6. {
  7.     public partial class Form1 : Form
  8.     {
  9.  
  10.         public Form1()
  11.         {
  12.             InitializeComponent();
  13.         }
  14.  
  15.         private void Form1_Load(object sender, EventArgs e)
  16.         {
  17.             listView1.ColumnClick += new ColumnClickEventHandler(ListViewColumnClick);
  18.             listView2.ColumnClick += new ColumnClickEventHandler(ListViewColumnClick);
  19.         }
  20.  
  21.         private void ListViewColumnClick(object sender, ColumnClickEventArgs e)
  22.         {
  23.             ListView list = (ListView)sender;
  24.             int index = e.Column;
  25.  
  26.             // show listview name and clicked column index
  27.             MessageBox.Show(string.Format("ListView: {0}\tColumn: {1}", list.Name, index));
  28.         }
  29.     }
  30. }

Ответить

Номер ответа: 6
Автор ответа:
 Dim22



Вопросов: 5
Ответов: 16
 Профиль | | #6 Добавлено: 08.10.08 19:31
 
  1. Private Sub ListView1_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles ListView1.ColumnClick, ListView2.ColumnClick
  2.         getliww1(sender)
  3.         ' If ListView1.Sorting = SortOrder.Descending Then
  4.         'ListView1.Sorting = SortOrder.Ascending
  5.         'Else
  6.         ' ListView1.Sorting = SortOrder.Descending
  7.         'End If
  8.         'ListView1.Sort() глючит и в массивы скидывает не то
  9.         If e.Column = 0 Then sortdd1(0)
  10.         If e.Column = 1 Then sortdd1(1)
  11.         If e.Column = 2 Then sortdd1(2)
  12.         If e.Column = 3 Then sortdd1(3)
  13.         setliww1(sender)
  14.     End Sub


сделал так, подобно ответу BG(Алексея)и EROS, на один Click повесил два Handles.

Огромное спасибо.

Ответить

Номер ответа: 7
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #7 Добавлено: 08.10.08 20:55

 If e.Column = 0 Then sortdd1(0)

        If e.Column = 1 Then sortdd1(1)

        If e.Column = 2 Then sortdd1(2)

        If e.Column = 3 Then sortdd1(3)


Это криво... замени эти строчки на
  1. sortdd1(e.Column)


getliww1(sender)
....
setliww1(sender)

Это, скорее всего, тоже последствие кривых рук.. По всей видимости ты тут устанавливаешь/читаешь локальную перменную уровня класса.. Логичней было бы создать некую подпрограмму(процедуру) для сортировки и в нее в качестве параметра передать 2 аргумета: Непосредственно сам ListView и индекс колонки по которому кликнули. Таким образом ты избавишься от этой локальной переменной.

Ответить

Номер ответа: 8
Автор ответа:
 Dim22



Вопросов: 5
Ответов: 16
 Профиль | | #8 Добавлено: 08.10.08 22:57
спасибо за замечания, сразу все не сообразил, возился с универсальной процедурой сортировки, чтобы там все было по минимуму, тут конечно эти три процедуры объединю в одну, в которую передам e и sender. И вообще есть мысль загнать ее в ООП вид ( в отдельный dll).

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам