Заполнить ListView структурами

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

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

Anatoliy
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 12.01.2005 (Ср) 18:13
Откуда: Kiev

Заполнить ListView структурами

Сообщение Anatoliy » 12.01.2005 (Ср) 18:20

Добрый день. Подскажите, как ListView заполнить пользовательскими структурами. И как после этого к ним обращаться. В TreeView в узлов есть свойство Tag, которому вожможно присваивать любой объект, в т.ч. и структуру.
А вот как это сделать с ListView?

Есть структура:

Код: Выделить всё
   Public Structure MyStructure
        Public Name As String
        Public Summ As Double
        Public FullName As String
    End Structure


Код: Выделить всё
        Dim mMyStructure(2) As MyStructure
        Dim LVIt As ListViewItem
        mMyStructure(0).Name = "First"
        mMyStructure(0).Summ = 3
        mMyStructure(0).FullName = "My First structure"

        mMyStructure(1).Name = "Second"
        mMyStructure(1).Summ = 12
        mMyStructure(1).FullName = "My Second structure"

        mMyStructure(2).Name = "Third"
        mMyStructure(2).Summ = 12
        mMyStructure(2).FullName = "My Third structure"

        ListView1.Clear()
        LVIt = New ListViewItem

А дальше?
Anatoliy

Ronin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 635
Зарегистрирован: 13.02.2002 (Ср) 14:16
Откуда: Россия, Москва

Сообщение Ronin » 13.01.2005 (Чт) 8:07

Ну как я понимаю, далее нужно добавить три записи в ListView. И кажной записи изменить свойсво Tag. Я это так понимаю...
Код: Выделить всё
        LVIt.Tag = mMyStructure(0)
        LVIt.Text = CType(LVIt.Tag, MyStructure).Name
        ListView1.Items.Add(LVIt)
С уважением,
Игорь Шувалов aka Ronin

Anatoliy
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 12.01.2005 (Ср) 18:13
Откуда: Kiev

Сообщение Anatoliy » 13.01.2005 (Чт) 11:06

Да. Действительно так. Как это я сам не нашел свойство Tag у ListViewItem???
Спасибо.
Теперь код выглядит следующим образом:

Код: Выделить всё
       
        Dim mMyStructure(2) As MyStructure
        Dim LVIt As ListViewItem
        Dim LVSbitSumm As ListViewItem.ListViewSubItem
        Dim LVSbitFullName As ListViewItem.ListViewSubItem
        Dim i As Integer
        mMyStructure(0).Name = "First"
        mMyStructure(0).Summ = 3
        mMyStructure(0).FullName = "My First structure"

        mMyStructure(1).Name = "Second"
        mMyStructure(1).Summ = 12
        mMyStructure(1).FullName = "My Second structure"


        mMyStructure(2).Name = "Third"
        mMyStructure(2).Summ = 12
        mMyStructure(2).FullName = "My Third structure"


        ListView1.View = View.Details
        ListView1.Columns.Add("Name", 70, HorizontalAlignment.Left)
        ListView1.Columns.Add("FullName", 120, HorizontalAlignment.Left)
        ListView1.Columns.Add("Summ", 70, HorizontalAlignment.Right)
        ListView1.Items.Clear()

        For i = LBound(mMyStructure) To UBound(mMyStructure)
            LVIt = New ListViewItem
            LVSbitFullName = New ListViewItem.ListViewSubItem
            LVSbitSumm = New ListViewItem.ListViewSubItem
            LVIt.SubItems.Add(LVSbitFullName)
            LVIt.SubItems.Add(LVSbitSumm)

            LVSbitFullName.Text = mMyStructure(i).FullName
            LVSbitSumm.Text = Format(mMyStructure(i).Summ, "## ##0.00")
            LVIt.Tag = mMyStructure(i)
            LVIt.Text = CType(LVIt.Tag, MyStructure).Name
            ListView1.Items.Add(LVIt)
        Next


И еще попутно вопрос. А как бы прицепить подобные структуры к комбобоксу?
А то следующий код выводит в комбобоксе 3 одинаковые записи:
OnlyTest.Form1+MyStructure:
Код: Выделить всё
        ComboBox1.Items.Clear()
        For i = LBound(mMyStructure) To UBound(mMyStructure)
            ComboBox1.Items.Add(mMyStructure(i))
        Next
Anatoliy

Ronin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 635
Зарегистрирован: 13.02.2002 (Ср) 14:16
Откуда: Россия, Москва

Сообщение Ronin » 13.01.2005 (Чт) 11:16

Не знаю, как насчет combobox... Попробуй привязать по индексу. Если, конечно не найдешь ответ на вопрос. Я бы поискал, но времени нет.. :(
С уважением,
Игорь Шувалов aka Ronin

Anatoliy
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 12.01.2005 (Ср) 18:13
Откуда: Kiev

ОК. Найду, поделюсь с со товарищами по программированию

Сообщение Anatoliy » 13.01.2005 (Чт) 12:10

:)
Anatoliy

Ronin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 635
Зарегистрирован: 13.02.2002 (Ср) 14:16
Откуда: Россия, Москва

Сообщение Ronin » 13.01.2005 (Чт) 12:17

То, как ты делаешь не прицепляет структуру, а всего-лишь берет текст новой записи из mMyStructure(i). Она берет ее при помощи overrides ToString функции. Ты можешь ее переопределить, что-бы выдавала, например Name... Или просто:
ComboBox1.Items.Add(mMyStructure(i).Name)
С уважением,
Игорь Шувалов aka Ronin

Anatoliy
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 12.01.2005 (Ср) 18:13
Откуда: Kiev

Вот и решение для ComboBox

Сообщение Anatoliy » 13.01.2005 (Чт) 12:37

Ну это же как - раз то, что надо!

Структуру обявить следующим образом:
Код: Выделить всё
   Public Structure MyStructure
        Public Name As String
        Public Summ As Double
        Public FullName As String
        Public Overrides Function ToString() As String
            ToString = Name
        End Function
    End Structure

И все становится на свои места. В комбобоксе отображается имя, а в пунктах комбобокса содержится вся остальная информация.
Еще раз спасибо
Anatoliy


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

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

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

    TopList