Помогите с ListView.

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

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

mse
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 61
Зарегистрирован: 24.07.2005 (Вс) 0:53

Помогите с ListView.

Сообщение mse » 01.04.2006 (Сб) 22:04

Когда добавляю массив элементов в ListView и получается пока они все не добавятся ListView как бы подвисает. Если использовать ListView.Update и ListView.EndUpdate
То происходит частое обновление его обновление (как бы мерцание).
Как от этого избавится? :)

mdx
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 169
Зарегистрирован: 06.01.2006 (Пт) 18:13
Откуда: I'm from Russia!

Сообщение mdx » 02.04.2006 (Вс) 12:53

В смысле от мерцания?
Код: Выделить всё
me.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
This posting is provided "AS IS" with no warranties, and confers no rights.

Изображение

mse
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 61
Зарегистрирован: 24.07.2005 (Вс) 0:53

Сообщение mse » 02.04.2006 (Вс) 14:19

Нет, это не это.
Это для компонентов применяется.
Вот код.

Код: Выделить всё
Private Sub TabFileTree_AfterSelect()


        Dim ThumbnailImagesList As New ImageList

        'Создание Thumbnail и добовление в ImagesList

        With ThumbnailImagesList
            .ImageSize = New Size(120, 100)
            .ColorDepth = ColorDepth.Depth32Bit
            .TransparentColor = Color.Transparent
        End With
        TabFileList.LargeImageList = ThumbnailImagesList

        'Конец создания Thumbnail и добовление в ImagesList


     
            Dim ImageFile As FileInfo
            Dim ImageDirectory As New DirectoryInfo(TabFileTree.SelectedNode.FullPath.ToString)
            Dim ImageCounter As Integer = 0

            'Сброс счётчиков и очистка коллекции
            ImageCollection.Clear()
            ImageCount = 1


            For Each ImageFile In ImageDirectory.GetFiles
                TabFileList.Update()

                'Добавление списка файлов в TabFileList
                TabFileList.Items.Add(Path.GetFileName(ImageFile.Name), ImageCounter)
                'Добавление списка файлов в коллекцию
                ImageCollection.Add(ImageFile.FullName)
                'Добавление списка файлов в ThumbnailImagesList
                ThumbnailImagesList.Images.Add(Image.FromFile(ImageFile.FullName))
       End For
    End Sub


+ Вот сама программа. Не хотел выкладывать пока допишу, но ладно так уж и быть.
Просто в ней ещё куча ошибок. И буду менять движок ёё полность и реализовывать поддержку 3Д файлов и те де.
Вложения
Image Viewer.zip
Image Viewer
(85 Кб) Скачиваний: 50

mdx
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 169
Зарегистрирован: 06.01.2006 (Пт) 18:13
Откуда: I'm from Russia!

Сообщение mdx » 02.04.2006 (Вс) 15:08

Вообще-то это лучше бы делать в каком-нибудь дополнительном treadе. Если пишешь на VB2005 - для этого есть класс BackgroundWorker. Я бы сделал так:
1. Получаешь список файлов
2. Делаешь в ImageList'е кучу копий какой-нибудь картинки по числу файлов
3. Добавляешь список файлов в ListView
4. Перерисовывая на каждом шаге, заменяешь в Imagelist'е картинки на настоящие
This posting is provided "AS IS" with no warranties, and confers no rights.

Изображение

mse
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 61
Зарегистрирован: 24.07.2005 (Вс) 0:53

Сообщение mse » 02.04.2006 (Вс) 22:47

1. Да понятно что на потоки разбивать.
2. Ну тот же эффект получается между прочим))
Есть ещё варианты? :idea:

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

Сообщение Nord777 » 03.04.2006 (Пн) 8:43

Application.DoEvents ???
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

mdx
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 169
Зарегистрирован: 06.01.2006 (Пт) 18:13
Откуда: I'm from Russia!

Сообщение mdx » 03.04.2006 (Пн) 8:57

Поставь таймер, и попробуй обновлять по нему. Мерцать будет значительно реже.
This posting is provided "AS IS" with no warranties, and confers no rights.

Изображение

mse
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 61
Зарегистрирован: 24.07.2005 (Вс) 0:53

Сообщение mse » 03.04.2006 (Пн) 11:00

Application.DoEvents - Это то же что и TabFileList.Update, TabFileList.EndUpdate

Application.DoEvents Method

When you run a Windows Form, it creates the new form, which then waits for events to handle. Each time the form handles an event, it processes all the code associated with that event. All other events wait in the queue. While your code handles the event, your application does not respond. For example, the window does not repaint if another window is dragged on top.
If you call DoEvents in your code, your application can handle the other events. For example, if you have a form that adds data to a ListBox and add DoEvents to your code, your form repaints when another window is dragged over it. If you remove DoEvents from your code, your form will not repaint until the click event handler of the button is finished executing.
Typically, you use this method in a loop to process messages.

Ну, таймер вариант. Но опять же, получается, будет мерцание, а это не очень приятно. Даже если оно уменьшится в 2 раза.

Ну что больше что не кто с этой проблемой не сталкивался? :idea:

VAngel
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 81
Зарегистрирован: 13.01.2005 (Чт) 0:10
Откуда: 2:5030

Сообщение VAngel » 09.04.2006 (Вс) 11:21

Код: Выделить всё
        Dim i As Integer
        Dim col(0 To 1000) As ListViewItem
        For i = 0 To 1000

            col(i) = New ListViewItem
            col(i).Text = "Запись " & i

        Next
        Me.ListView1.Items.AddRange(col)


Может так, не очень эротично но без мерцания[/code]

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Re: Помогите с ListView.

Сообщение Sebas » 09.04.2006 (Вс) 11:26

mse писал(а):Если использовать ListView.Update и ListView.EndUpdate
То происходит частое обновление его обновление (как бы мерцание).
Как от этого избавится? :)


Не может быть, ты что, их на добавление каждой итемы ставишь?!?!?
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

mse
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 61
Зарегистрирован: 24.07.2005 (Вс) 0:53

Сообщение mse » 09.04.2006 (Вс) 16:20

сори провтыкал... Сейчас перепишу посмотрю на результат.


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

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

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

    TopList