none
Переход в колекции ListBox с помощью кнопок ? RRS feed

  • Вопрос

  • Имеется горизонтальный  ЛистБокс  в приложении WPF,  в котором выводится коллекция рисунков. Размеры ЛистБокс  по горизонтали ограниченны. Количество элементов не известно Хочется прикрутить к нему навигацию с помощью двух кнопок по бокам.

    Вот получился такой код.

    В право

    Private Sub Button1_Click(ByVal sender As System.Object, _

            ByVal e As System.Windows.RoutedEventArgs) _

            Handles Button1.Click

                'Save the selected index

                Dim index As Integer = ImageList.SelectedIndex

                index = index + 1

                ImageList.SelectedIndex = index

                Try

                    ImageList.ScrollIntoView(ImageList.Items(index))

                Catch ex As ArgumentOutOfRangeException

                    Exit Try

                End Try

            End Sub

    В лево

            Private Sub Button2_Click(ByVal sender As System.Object, _

            ByVal e As System.Windows.RoutedEventArgs) Handles Button2.Click

                'Save the selected index

                Dim index As Integer = ImageList.SelectedIndex

                If index > 0 Then

                    index = index - 1

                    ImageList.SelectedIndex = index

                    ImageList.ScrollIntoView(ImageList.Items(index))

                End If

            End Sub

    Код рабочий как думаете потянет.

    9 октября 2010 г. 5:07

Ответы

  • Ошибка

    1 "Count" не является членом "System.Windows.Controls.ListBox".        MainWindow.xaml.vb 52


    естественно, я говорю про  коллекцию общего вида...если ListBox, то там наверное imageList.Items.Count или что-нибудь подобное, не помню уже как в wpf
    • Помечено в качестве ответа a.lisov 13 октября 2010 г. 9:49
    13 октября 2010 г. 8:52
  • Должна быть проверка на  index < ImageList.Items.Count - 1, раз уж ты увеличиваешь index после проверки.
    • Помечено в качестве ответа a.lisov 13 октября 2010 г. 9:49
    13 октября 2010 г. 9:44
    Модератор

Все ответы

  • Ну профи интересно ваше мнение. Как правильно сделать ?
    9 октября 2010 г. 11:50
  • Обосновано ли здесь использование конструкции   

          Try
            ImageList.ScrollIntoView(ImageList.Items(index))
          Catch ex As ArgumentOutOfRangeException
            Exit Try
          End Try
    
    

    в качестве выхода при индексе привышающем максимальный индекс в коллекции.
    13 октября 2010 г. 8:13
  • Обосновано ли здесь использование конструкции   

       Try
    
        ImageList.ScrollIntoView(ImageList.Items(index))
    
       Catch ex As ArgumentOutOfRangeException
    
        Exit Try
    
       End Try
    
    
    
    

     

    в качестве выхода при индексе привышающем максимальный индекс в коллекции.

    А почему бы просто не проверить, что index < ImageList.Count ?  
    13 октября 2010 г. 8:22
  • Ошибка

    1 "Count" не является членом "System.Windows.Controls.ListBox".        MainWindow.xaml.vb 52

    13 октября 2010 г. 8:34
  • Ошибка

    1 "Count" не является членом "System.Windows.Controls.ListBox".        MainWindow.xaml.vb 52


    естественно, я говорю про  коллекцию общего вида...если ListBox, то там наверное imageList.Items.Count или что-нибудь подобное, не помню уже как в wpf
    • Помечено в качестве ответа a.lisov 13 октября 2010 г. 9:49
    13 октября 2010 г. 8:52
  •        Dim index As Integer = ImageList.SelectedIndex
          If index < ImageList.Items.Count Then
            index += 1
            ImageList.SelectedIndex = index
            ImageList.ScrollIntoView(ImageList.Items(index))
          End If
    

    Все равно индекс вылетает за пределы колекции.

    ArgumentOutOfRangeException не обработанно

    Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
      Имя параметра: index

    13 октября 2010 г. 9:21
  • Должна быть проверка на  index < ImageList.Items.Count - 1, раз уж ты увеличиваешь index после проверки.
    • Помечено в качестве ответа a.lisov 13 октября 2010 г. 9:49
    13 октября 2010 г. 9:44
    Модератор
  • Это оптимальный вариант

          Dim index As Integer = ImageList.SelectedIndex
          index += 1
          If index < ImageList.Items.Count Then
            ImageList.SelectedIndex = index
            ' Try
            ImageList.ScrollIntoView(ImageList.Items(index))
          End If

     Всем спасибо

    13 октября 2010 г. 9:46