Как определить, когда в listview загружены элементы?
У меня есть 2 формы в моей программе, которые имеют listviews в них с флажками. Когда пользователь нажимает кнопку "открыть", ему предлагается загрузить один из моих пользовательских файлов базы данных (произвольный доступ). Я могу загрузить файлы нормально, но они могут содержать до 6500 слов, что занимает несколько секунд. Я не хочу, чтобы пользователь нажимал на кнопку для манипулирования данными в listview до тех пор, пока он не завершит рисование (все элементы показаны).
Что я уже пробовал:
Это код, который загружает listview. Я не смог придумать решение для обнаружения, когда элемент управления отображается и полностью загружен.
<pre>Private Sub OPENToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles OPENToolStripMenuItem.Click ' ***** This is the FILE/OPEN menu item ***** ' Step 1: Establish the variables I will use in this subroutine. Dim tmpInt1 As Integer = 0 Dim tmpInt2 As Integer = 0 Dim tmpString1 As String = Nothing Dim tmpString2 As String = Nothing ' Step 2: Set the variable ListLoaded to false to prevent unwanted code from running. ListLoaded = False ' Step 3: Set up the OpenFile dialog box. OpenFileDialog1.Reset() OpenFileDialog1.DefaultExt = "dat" OpenFileDialog1.CheckFileExists = True OpenFileDialog1.CheckPathExists = True OpenFileDialog1.Multiselect = False OpenFileDialog1.ValidateNames = True OpenFileDialog1.Title = "Select the word dictionary that you wish to export from:" OpenFileDialog1.Filter = "ERea Chances Are Word Dictionary Files (*.dat)|*.dat" OpenFileDialog1.InitialDirectory = DictPath ' Step 4: Open the dialog box. If the user clicks cancel, exit the sub. If OpenFileDialog1.ShowDialog = DialogResult.Cancel Then Exit Sub ' Step 5: Set the back color for label6 to white, and put the selected file path in the label. Label6.BackColor = System.Drawing.Color.White Label6.Text = OpenFileDialog1.FileName ' Step 6: Refresh the entire form. Me.Refresh() ' Step 7: Hide Label1 & enable GroupBox2 Label1.Hide() GroupBox2.Enabled = True ' Step 8: Get a free file number and open the selected dictionary file. FileNum = FreeFile() FileOpen(FileNum, Trim(Label6.Text), OpenMode.Random, OpenAccess.Read, OpenShare.LockRead) ' Step 9: Get the first entry in this file and set the progressbar maximum to it. FileGet(FileNum, tmpInt1, 1) If tmpInt1 > 6500 Then MsgBox("There are more than 6500 words in the selected dictionary file." & Chr(10) & "Only the first 6500 words will be loaded.") tmpInt1 = 6500 End If ' Step 11: Set the back color for Label7 to WHITE and populate the field with the word count. Label7.BackColor = System.Drawing.Color.White Label7.Text = tmpInt1 ' Step 12: Loop thru the dictionary file and place the words and their lengths into the listview control. For x As Integer = 3 To (tmpInt1 + 2) FileGet(FileNum, tmpString1, x) If tmpString1 <> String.Empty Then Dim wrditem As New ListViewItem tmpString2 = Trim(Mid(tmpString1, 1, 15)) tmpInt2 = Len(Trim(tmpString2)) wrditem.Text = tmpString2 wrditem.SubItems.Add(Str(tmpInt2)) ListView1.Items.Add(wrditem) End If Next ' Step 13: Close the dictionary file. FileClose(FileNum) ' Step 14: Reset the variable ListLoaded to its default value. ListLoaded = True ' Step 15: Set the sort order for the listview control and sort the list ascending (alphabetically). ListView1.Sorting = SortOrder.Ascending ListView1.Sort() ' Step 16: Make the back color of Label8 white & place the checked items count in the label. Label8.BackColor = System.Drawing.Color.White Label8.Text = ListView1.CheckedItems.Count.ToString ' Step 17:Enable GroupBoxes 3 & 4. If ListView1.Items.Count > 0 Then GroupBox3.Enabled = True Button1.Enabled = True Button2.Enabled = False GroupBox4.Enabled = False End If ' Step 18: Return the menu items to their proper status. EXPORTToolStripMenuItem.Enabled = False SAVEASToolStripMenuItem.Enabled = True STARTToolStripMenuItem.Enabled = False CLOSEToolStripMenuItem.Enabled = True OPENToolStripMenuItem.Enabled = False EXITToolStripMenuItem.Enabled = False End Sub
CHill60
Какую платформу вы используете (WPF, Winforms, Web) и как вы ее заполняете (покажите свой код)
Richard MacCutchan
6500 элементов в ListView-это слишком много. Вы действительно хотите, чтобы ваши пользователи должны были пролистать страницу вниз около 100 раз, чтобы найти элемент? Используйте пейджинговую систему таким образом, чтобы вы читали только тот объем данных, который необходим для отображения 3 или 4 "страниц" одновременно.
[no name]
Именно это я и пытаюсь сделать-включить кнопку поиска после загрузки слов. Раньше этот список составлял 92 тысячи, и я сократил его. Извините, что беспокою вас, ребята, я новичок в программировании и просто не знаю всех продвинутых вещей, которые вы, ребята, делаете. Я ищу в интернете некоторые вещи, но все равно я медленно учусь. Спасибо за ваш совет.