Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ListView.HitTest() возвращает неправильный SubItem 
V
    Опции темы
_hunter
  Дата 17.3.2008, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 1
Всего: 98



Добрый день...

В обработчике MouseUp  ListView'а я определяю item и subItem по которым произведен клик:
Код

            ListViewHitTestInfo hti = HitTest(e.X, e.Y);

            ListViewItem listViewItem = hti.Item;
            if (listViewItem == null)
                listViewItem = GetItemAt(e.X, e.Y);
            ListViewItem.ListViewSubItem listViewSubItem = hti.SubItem;

но есть одна проблема: при клике по label'у listViewSubItem указывает на тот же "элемент" что и listViewItem (что для меня неправильно).
Нужно это поведение "отфильтровать". Но проверка listViewItem.Equals(listViewSubItem) ничего не дала, а привести ListViewItem.ListViewSubItem к ListViewItem (и наоборот) не получается...

Что тут можно сделать?

С уважением...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
vponomarov
Дата 17.3.2008, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 11.8.2007
Где: Киев

Репутация: 5
Всего: 12



_hunter, во-первых, код должен быть таким (проверил, работает):
Код

//инициализация listView1
System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem(new string[] {
            "aaa",
            "aaa1",
            "aaa2"}, -1);
            System.Windows.Forms.ListViewItem listViewItem2 = new System.Windows.Forms.ListViewItem(new string[] {
            "bbb",
            "bbb1",
            "bbb2"}, -1);
            this.listView1 = new System.Windows.Forms.ListView();
            this.columnHeader1 = new System.Windows.Forms.ColumnHeader();
            this.columnHeader2 = new System.Windows.Forms.ColumnHeader();
            this.columnHeader3 = new System.Windows.Forms.ColumnHeader();
            this.SuspendLayout();
            // 
            // listView1
            // 
            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
            this.columnHeader1,
            this.columnHeader2,
            this.columnHeader3});
            this.listView1.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
            listViewItem1,
            listViewItem2});
            this.listView1.Location = new System.Drawing.Point(23, 12);
            this.listView1.Name = "listView1";
            this.listView1.Size = new System.Drawing.Size(229, 214);
            this.listView1.TabIndex = 0;
            this.listView1.UseCompatibleStateImageBehavior = false;
            this.listView1.View = System.Windows.Forms.View.Details;
            this.listView1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseUp);
//--------------------------------------------------------------------------------------------------------------------------------------------
private void listView1_MouseUp(object sender, MouseEventArgs e)
{
            ListViewHitTestInfo hti = listView1.HitTest(e.X, e.Y);
            ListViewItem listViewItem = hti.Item;

            //if (listViewItem == null)
            //    listViewItem = GetItemAt(e.X, e.Y);

            ListViewItem.ListViewSubItem listViewSubItem = hti.SubItem;
}

попробуй с такими настройками listView1.
может я чего-то не понимаю, но когда я клацаю на ааа1, listViewItem=ааа, а listViewSubItem=ааа1.
если кликнуть на ааа, то listViewItem=ааа, а listViewSubItem=ааа.
такое поведение тебя не устраивает?

закомментированая проверка лишина смысла, по-моему smile 
во-вторых, нужно писать listView1.HitTest и listView1.GetItemAt иначе вообще не компилится (но возможно ты просто не весь код приводишь и там все ок)


--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
Freak_FB
Дата 17.3.2008, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ктулхувед
**


Профиль
Группа: Участник
Сообщений: 296
Регистрация: 13.10.2006

Репутация: 2
Всего: 4



Эта статья полностью раскрывает тему HitTest.

Или вот чисто моё решение вопроса:
Код

private void listView1_MouseMove(object sender, MouseEventArgs e)
{
  try
  {
    ListViewHitTestInfo lvhti = listView1.HitTest(e.Location);
    toolStripStatusLabel1.Text = lvhti.Item.Text;
    toolStripStatusLabel2.Text = lvhti.Item.SubItems.IndexOf(lvhti.SubItem).ToString() + ":" + lvhti.SubItem.Text;
  }
  catch (Exception)
  {
    toolStripStatusLabel1.Text = "XXX";
    toolStripStatusLabel2.Text = "XXX";
  }
}


Это сообщение отредактировал(а) Freak_FB - 17.3.2008, 22:53


--------------------
user posted image
user posted image
Тонет Ктулху, все медведы горят в огне.
Я Креведко, очень страшно сегодня мне.

PM MAIL ICQ Skype GTalk Jabber   Вверх
vponomarov
Дата 18.3.2008, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 11.8.2007
Где: Киев

Репутация: 5
Всего: 12



Freak_FB, ну и чем это отличается от моего кода? smile 


--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
Freak_FB
Дата 18.3.2008, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ктулхувед
**


Профиль
Группа: Участник
Сообщений: 296
Регистрация: 13.10.2006

Репутация: 2
Всего: 4



vponomarov, а отличается он тем, что у меня явно выражено определение номера колонки, над которой в данный момент зависает курсор мыши.


--------------------
user posted image
user posted image
Тонет Ктулху, все медведы горят в огне.
Я Креведко, очень страшно сегодня мне.

PM MAIL ICQ Skype GTalk Jabber   Вверх
vponomarov
Дата 18.3.2008, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 11.8.2007
Где: Киев

Репутация: 5
Всего: 12



Freak_FB, ну разве что это...
правда не уверен, что для автора это было критично, но возможно это ему поможет.


--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
_hunter
Дата 18.3.2008, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 1
Всего: 98



именно это и было нужно.
а в первом коде воспроизводилась моя проблема:
Цитата(vponomarov @  17.3.2008,  21:36 Найти цитируемый пост)
если кликнуть на ааа, то listViewItem=ааа, а listViewSubItem=ааа.




--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0559 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.