Форум программистов, компьютерный форум, киберфорум
mozgotron
Войти
Регистрация
Восстановить пароль
Рейтинг: 1.00. Голосов: 1.

VB .NET / Логика поведения контрола ListBox: программное выделение строк после удаления значений в списке

Запись от mozgotron размещена 15.12.2019 в 16:01

В нижеприведённом Листбоксе удаление записи в любой позиции сопровождается последующим программным выделением записи, следующей после удалённой записи, либо предшествующей ей записи. В зависимости от расположения удаляемой записи.

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

После удаления записи, автоматически выделяется запись, которая встала на место удалённой.
Если после удалённой записи других нет, то автоматически выделяется запись, предшествующая удалённой.
Если в списке вообще не осталось записей, то автоматического выделения не происходит.

До тех пор, пока после удаляемой записи есть хотя бы одна запись, выделяется одна и та же позиция Листбокса. Как только записей после удалённой не остаётся, выделяемая позиция начинает смещаться вверх по списку вместе с последней записью.

Программная реализация описанной логики поведения:
vb.net
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
27
28
29
30
31
32
33
34
Public Class Form1
 
    Dim IndSel As Integer 'индекс выделенной записи
    Dim ItemsCount As Integer 'количество записей
 
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
 
        If ListBox1.Items.Count > 0 Then ListBox1.SelectedIndex = 0 'автоматически выделяем первую запись
 
    End Sub
 
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
 
        IndSel = ListBox1.SelectedIndex 'запоминаем индекс выделенной записи
        ListBox1.Items.RemoveAt(IndSel) 'удаляем выделенную запись по её индексу
 
        'В связи с изменением списка проверяем аргументы и условия:
 
        ItemsCount = ListBox1.Items.Count 'Считаем количество записей в списке
        If ItemsCount < 1 Then 'Если список опустел,
            Button1.Enabled = False 'блокируем кнопку.
        Else 'Если в списке есть хотя бы одна запись,
            If IndSel < ItemsCount Then 'Если индекс < количества,
                ListBox1.SelectedIndex = IndSel 'выделяем запись с этим индексом.
            ElseIf IndSel = ItemsCount Then 'Если индекс = количеству,
                ListBox1.SelectedIndex = ItemsCount - 1 'выделяем запись, ставшую последней.
            End If
        End If
 
    End Sub
 
End Class
Скриншот пробного EXE-файла:
Нажмите на изображение для увеличения
Название: Скриншот 2019-12-14 23.28.56.png
Просмотров: 2701
Размер:	7.6 Кб
ID:	5754

ZIP-архив с пробным EXE-файлом, демонстрирующий логику поведения:
Листбокс с уменьшением записей.zip
Adler32: 2BEAAB2E
CRC32: 49B365EB
MD5: 7CAA9A8462FDBF2AE7D7301B6379384C
SHA-1: C0E75F75E8BFFDAE7F72D428D3D4B7B6C70B2BD5
SHA-256: 37E71339347D9752C7B8A1E77CF5FE8BD8C7A0606AC1ECC45BDFCBBFC558 F595
Размещено в справка
Просмотров 493 Комментарии 2
Всего комментариев 2
Комментарии
  1. Старый комментарий
    надо добавлять в заголовке темы, что это на VB
    знал бы заранее - вообще бы не открывал блог
    Запись от untyped размещена 15.12.2019 в 19:42 untyped вне форума
  2. Старый комментарий
    Аватар для mozgotron
    untyped, исправил. Если не секрет, от каких ещё языков программирования вас тошнит? Огласите весь список пожалуйста. Мне очень интересно.
    Запись от mozgotron размещена 16.12.2019 в 15:57 mozgotron вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.