Проблема с CheckedListBox

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Проблема с CheckedListBox

Сообщение AnarCky » 20.12.2006 (Ср) 19:29

Вот по такому коду...

Код: Выделить всё
    Private Sub TableSkinNastr_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If clbOb.CheckedItems.Item(1) Then
            lbDan.Items.Remove("Символ элемента")
        End If
    End Sub


...он выдает следующую ошибку:

Что делать?
Вложения
temp3.png
temp3.png (10.82 Кб) Просмотров: 1833
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Re: Проблема с CheckedListBox

Сообщение GSerg » 20.12.2006 (Ср) 19:37

AnarCky писал(а):Что делать?

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

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 20.12.2006 (Ср) 19:39

А я не понимаю.

Что значит: "Индекс за пределами массива."?
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.12.2006 (Ср) 19:45

Это значит, что у массива есть пределы, и индекс находится за ними :roll:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 20.12.2006 (Ср) 19:46

О каком массиве вообще идет речь?
Я массива не создавал.
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.12.2006 (Ср) 19:49

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

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 20.12.2006 (Ср) 19:53

Книжку я купил 2 недели назад. Еще изучаю.
Ну ладно, первый массив я нашел. "clbOb.CheckedIthemes", верно?
А второй где? Просто для общего просвещения скажи если не трудно.
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.12.2006 (Ср) 20:12

И индекс у него - 1.
А где ещё индекс в этом коде?..
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 21.12.2006 (Чт) 11:40

Полный код вот:

Код: Выделить всё
    Private Sub TableSkinNastr_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If clbOb.CheckedItems.Item(0) Then
            lbDan.Items.Remove("Символ элемента")
        End If
        If clbOb.CheckedItems.Item(1) Then
            lbDan.Items.Remove("Порядковый номер")
        End If
        If clbOb.CheckedItems.Item(2) Then
            lbDan.Items.Remove("Электронная конфигурация")
        End If
        If clbOb.CheckedItems.Item(3) Then
            lbDan.Items.Remove("Электроотрицательность")
        End If
        If clbOb.CheckedItems.Item(4) Then
            lbDan.Items.Remove("Год открытия")
        End If
        If clbOb.CheckedItems.Item(5) Then
            lbDan.Items.Remove("Латинское название")
        End If
        If clbOb.CheckedItems.Item(6) Then
            lbDan.Items.Remove("Потенциал ионизации")
        End If
        If clbOb.CheckedItems.Item(7) Then
            lbDan.Items.Remove("1-я энергия ионизации")
        End If
        If clbOb.CheckedItems.Item(8) Then
            lbDan.Items.Remove("2-я энергия ионизации")
        End If
        If clbOb.CheckedItems.Item(9) Then
            lbDan.Items.Remove("Плотность простого вещества")
        End If
        If clbOb.CheckedItems.Item(10) Then
            lbDan.Items.Remove("Температура плавления")
        End If
        If clbOb.CheckedItems.Item(11) Then
            lbDan.Items.Remove("Температура кипения")
        End If
        If clbOb.CheckedItems.Item(12) Then
            lbDan.Items.Remove("Электропроводность")
        End If
    End Sub


К слову: я пробовал сделать все оператором Select Case, но не получилось. Я не знаю как прописать условие сразу после оператора.

И еще вопрос: в CheckedListBox можно сделать так, чтобы по умолчание было отмечено несколько строк и если да, то как?
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 21.12.2006 (Чт) 12:22

Код заслуживает попадания в цитаты с пометкой "как не надо делать"

А перебрать циклом никак нельзя было?

Второй вопрос: можно, почему бы и нет.
Весь мир матрица, а мы в нем потоки байтов!

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 21.12.2006 (Чт) 17:46

Я наверное чего-то не знаю в этой жизни, но текст то каждый раз разный набирать надо...

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

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 22.12.2006 (Пт) 8:17

Ежели автор соизволит достаточно подробно объяснить суть решаемой им проблемы, то поскажу как это реализовать, а пока держи пример утянутый из MSDN:

Код: Выделить всё
Private Sub WhatIsChecked_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles WhatIsChecked.Click
    ' Display in a message box all the items that are checked.
    Dim indexChecked As Integer
    Dim itemChecked As Object
    Const quote As String = """"

    ' First show the index and check state of all selected items.
    For Each indexChecked In CheckedListBox1.CheckedIndices
        ' The indexChecked variable contains the index of the item.
        MessageBox.Show("Index#: " + indexChecked.ToString() + ", is checked. Checked state is:" + _
                        CheckedListBox1.GetItemCheckState(indexChecked).ToString() + ".")
    Next

    ' Next show the object title and check state for each item selected.
    For Each itemChecked In CheckedListBox1.CheckedItems

        ' Use the IndexOf method to get the index of an item.
        MessageBox.Show("Item with title: " + quote + itemChecked.ToString() + quote + _
                        ", is checked. Checked state is: " + _
                        CheckedListBox1.GetItemCheckState(CheckedListBox1.Items.IndexOf(itemChecked)).ToString() + ".")
    Next

End Sub


З.Ы. думаю, что почитать в MSDN об CheckedListBox весьма пользительное чтение.
Весь мир матрица, а мы в нем потоки байтов!

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 22.12.2006 (Пт) 13:09

!Viper! писал(а): думаю, что почитать в MSDN об CheckedListBox весьма пользительное чтение.


Я тоже так думаю. А что такое MSDN?

Задача такова:
Есть окно CheckedListBox (clbOb) и List Box (lbDan). В них есть абсолютно идентичные строки по 13 штук в каждой. Надо чтобы при загрузке формы отмеченные строки в clbOb соотносились с идентичными строками в lbDan и последние убирались из ListBox`а.
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 22.12.2006 (Пт) 16:03

Простейший код:

Код: Выделить всё
Dim s As String
For Each s In clb.CheckedItems
        ' для каждой строки среди отмеченных элементов
        If lb.Items.IndexOf(s) <> -1 Then
                ' если соответствующий элемент есть в ListBox, то грохаем его
                lb.Items.Remove(s)
        End If
Next


Модифицируй его под свои конкретные цели. Здесь clb - CheckedListBox, а lb - ListBox
Весь мир матрица, а мы в нем потоки байтов!

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 23.12.2006 (Сб) 18:29

Огромное спасибо!!! :)
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 23.12.2006 (Сб) 18:40

А можно еще вопрос: в CheckedListBox можно сделать так, чтобы по умолчанию было отмечено несколько строк и если да, то как :?:
В окне Properties я не нашел. А кодом...
Когда я пытаюсь присвоить свойству CheckedIthems или CheckedIdice соответствующее значение, то он говорит, что "Read Only". :(
Помогите плзз...
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 24.12.2006 (Вс) 14:32

Код: Выделить всё
        CheckedListBox1.SetItemCheckState(0, CheckState.Checked)
        CheckedListBox1.SetItemCheckState(2, CheckState.Checked)

будет отмечены первый и третий элементы.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 24.12.2006 (Вс) 17:31

Огромное спасибо!!!
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 42

    TopList  
cron