powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Listview-Report + checkboxes -глюки при выделении нескольких записей.
4 сообщений из 4, страница 1 из 1
Listview-Report + checkboxes -глюки при выделении нескольких записей.
    #38423878
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ListView (.NET)

Таблица, много записей, итемы имеют свойство checkbox.
Например есть несколько записей подряд с checked=true
Начинаем например тянуть мышку от нижней к верхней, при нажатой LeftButton с целью их всех выделить.
при отпускании мыши (на верхней выделенной записи), галки со всех записей кроме нижней снимаются .

Еще:
двойной щелчок по итему (не в той колонке где чекбокс) приводит к изменению его состояния true/false

Поведение логически неправильное и нестандартное.

В VB6 с 6-ми контролами не помню,
но с 5-ми, где использую API-чекбоксы такой фигни нет.

Есть идеи как лечить?
М.б. свойства ListView какие?

Хитрых кодов обработки особо не добавлял, даже пробовал закомментировать ListView1_ItemChecked,
готов если что сделать чистый проект.
Но ощущение что фигня идет в "базовом .NET-Listview комплекте".
...
Рейтинг: 0 / 0
Listview-Report + checkboxes -глюки при выделении нескольких записей.
    #38423880
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На тестовом мини-проекте глюки подтверждаются.
...
Рейтинг: 0 / 0
Listview-Report + checkboxes -глюки при выделении нескольких записей.
    #38423889
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listview with checkboxes!Urgent
VBDotNet Team (MS) 11 лет назадWe were able to reproduce the behavior you are seeing. It helped to know
that you had multiple columns. There is nothing wrong with your code. We
tried a few work-arounds in the SelectedIndexChanged event handler, but none
would give you the behavior you desire. We suggest that you set
FullRowSelect to False. It is not the best solution, but it should prevent
the unexpected check and uncheck behavior.
Thanks for bringing this issue to our attention. We will report the behavior
to our development team
Т.е. они подтверждают баг и за 11 лет не исправили его?
ПИЗ..Ц! Сортировка отдыхает.

Там же ниже "Workaround" (текущего года выпуска, лучший из того что нашел):
Код: vbnet
1.
2.
3.
4.
  Private Sub ListView1_ItemCheck(ByVal sender As Object, _
   ByVal e As System.Windows.Forms.ItemCheckEventArgs) Handles ListView1.ItemCheck
    If (ListView1.SelectedItems.Count > 1) Then e.NewValue = e.CurrentValue
  End Sub


Но это тоже неправильное поведение, чекбоксы должны нажиматься и при выделенных записях.

И потом, это не спасает от DoubleClick, по двойному щелчку редактирование записи.

Предлагаемый отказ от FullRowSelect -бред, а если я хочу выделить много записей и их удалить?

Ловить mouseup и пытаться что-то сделать - метод "детского сада".

Единственный "взрослый" вариант - попробовать делать/работать с чекбоксами через API,
LVS_EX_CHECKBOXES, LVM_SETITEMSTATE, LVM_GETITEMSTATE, WM_NOTIFY+LVN_ITEMCHANGED
но может не пройти, если сильно изгадили, боюсь глюки будут также срабатывать.
...
Рейтинг: 0 / 0
Listview-Report + checkboxes -глюки при выделении нескольких записей.
    #38423903
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Единственный "взрослый" вариант - попробовать делать/работать с чекбоксами через API,
LVS_EX_CHECKBOXES, LVM_SETITEMSTATE, LVM_GETITEMSTATE, WM_NOTIFY+LVN_ITEMCHANGED
но может не пройти, если сильно изгадили, боюсь глюки будут также срабатывать.
Вылечил.
Достаточно отключить .Net-приблуду, т.е. сделать
Код: vbnet
1.
ListView1.CheckBoxes = False


а вместо этого поставить оригинальный стиль
LVS_EX_CHECKBOXES

Имеем:
1) Свойство .checked -работает, события типа ItemChecked - работают (комфорт и .NET функционал сохранили)
Код: vbnet
1.
2.
3.
4.
  Private Sub ListView1_ItemChecked(ByVal sender As Object,
   ByVal e As System.Windows.Forms.ItemCheckedEventArgs) Handles ListView1.ItemChecked
    Debug.Print(e.Item.Index & "(" & e.Item.Checked & ")")
  End Sub


2) Глюков с checked/unchecked НЕТУ

Горе-девелоперы контрола ошиблись/начудили при установке стиля контрола.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Public Class Form1
  Private Const LVM_FIRST = &H1000
  Private Const LVM_GETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + &H37
  Private Const LVM_SETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + &H36

  Private Const LVS_EX_CHECKBOXES = &H4&

  Private Declare Function SendMessage Lib "user32" Alias "SendMessageW" _
   (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As IntPtr) As Integer

  Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    ListView1.CheckBoxes = False 'необходимо, можно в конструкторе

    Dim lStyle As Integer = SendMessage(ListView1.Handle, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0)
    lStyle = lStyle Or LVS_EX_CHECKBOXES
    Call SendMessage(ListView1.Handle, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, lStyle)

    For i As Integer = 0 To 20
      Dim LItem As ListViewItem = New ListViewItem
      LItem.SubItems.Add("subitem" & i.ToString & "-1")
      LItem.SubItems.Add("subitem" & i.ToString & "-2")
      LItem.Checked = True
      ListView1.Items.Add(LItem)
    Next i

  End Sub
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Listview-Report + checkboxes -глюки при выделении нескольких записей.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]