Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Как в ListBox запоминать данные,


Автор: *^angel^* 4.5.2003, 20:22
день добрый! smile.gif
Подскажите как средствами VBA можно сделать следующее:
есть ListBox надо хапоминать туда данные, которые не должны исчезать после выхода из программы. Может нужно в файл запоминать?

Автор: valex13 5.5.2003, 09:03
Да. Лучше всего в ini. Вот пример работы:
'Записать информацию в ini
Public Declare Function WritePrivateProfileString Lib "KERNEL32" _
Alias "WritePrivateProfileStringA" (ByVal AppName As String, _
ByVal KeyName As String, ByVal keydefault As String, _
ByVal FileName As String) As Long
'Получить информацию из совственного ini
Public Declare Function GetPrivateProfileString Lib "KERNEL32" _
Alias "GetPrivateProfileStringA" (ByVal AppName As String, _
ByVal KeyName As String, ByVal keydefault As String, _
ByVal ReturnString As String, ByVal NumBytes As Long, _
ByVal FileName As String) As Long
'Считываем
iRez = GetPrivateProfileString("options", "DBPath", _
"", sTemp, iSize, Application.Path & "\MyFile.ini")
'Записываем
iRez = WritePrivateProfileString("options", "DBPath", sPath, _
Application.Path & "\MyFile.ini")
Записываешь сначало количество элементов, а потом в цикле и элементы.
Считываешь так же.

Автор: Unregistered 5.5.2003, 22:01
спасибо, я конечно умная, но к сожалению, в VBA не разбираюсь.........
можно это как-то легче написать? я в этом коде ничего не поняла.........

Автор: valex13 13.5.2003, 03:09
Цитата
Подскажите как средствами VBA можно сделать следующее:

Именно. Средствами Visual Basic for Application.
Однако. Этот способ наиболее легкий, а главное - классический.
Можете хранить информацию в реестре, но способ все равно тот же.
Вам нужно вызывать функции WINAPI для работы с реестром. Это придется делять в любом языке.
Стоит ли овчинка выделки? Решать вам.

Автор: vickr 15.5.2003, 08:40
Выше приведенные советы вполне разумны, но есть альтернатива - функции VB для чтения/записи файлов. Не буду вдаваться в теорию, приведу пример кода сброса данных из ListBox в файл. Проверил в VB6 - все работает. В VBA тоже должно, по идее.
Dim i As Integer
Open "listdata.txt" For Output As #1
For i = 0 To List1.ListCount - 1
List1.ListIndex = i
Print #1, List1.Text
Next i
Print #1, List1.List(i)
Close #1
Или так, на строчку короче (и, по идее чуть быстрее):
Dim i As Integer
Open "listdata.txt" For Output As #1
For i = 0 To List1.ListCount - 1
Print #1, List1.List(i)
Next i
Print #1, List1.List(i)
Close #1
Ну а потом, когда нужно, считываешь эти данные обратно в ListBox.
Удачных экспериментов.

Автор: *^angel^* 20.5.2003, 09:11
vickr спасибо большое. Я почти так и сделала smile.gif))
сохраняет в файл:
Код
Private Sub Form_Load()
Dim a As String
On Error Goto 1

Open "list.lst" For Input As 1
Do Until EOF(1)
Input #1, a
list1.AddItem a
Loop
1 Close
End Sub


Считавает из файла в ListBox:

Код
Private Sub Form_Unload()
Open "list.lst" For Output As 1
For i = 0 To list1.ListCount - 1
Write #1, list1.List(i)
Next
Close
End Sub



valex13 овчинка выделки не стоит.

Автор: *^angel^* 20.5.2003, 09:14
т.е. наоборот, сначало код для считывания, а потом для записи....

Автор: cardinal 21.5.2003, 17:53

Соблюдайте синтаксис! Пишите исходники так, чтобы их было легче читать. Делайте сноски в if ... else, for ... next, do while ... loop и т.д. Пишите комментарии если вы написали то, что может быть не понятно другим участникам и посетителям форума. Пишите когда указанный исходник может не работать! Просьба также помещать цитаты и куски кода в спец. рамки. Это не наезд, а попытка сделать форум лучше smile.gif


Код
Private Sub Form_Load()
Dim a As String
' мы исходим из того, что файл есть!
' лучше сделать в этом месте проверку
' на существование этого файла и создать
' файл в случае его отсутствия.
Open App.Path & "\list.lst" For Input As #1
Do While Not EOF(1)
   Input #1, a
   List1.AddItem a
Loop
Close #1
End Sub

Private Sub Form_Unload(Cancel As Integer)
Open App.Path & "\list.lst" For Output As #1
For i = 0 To List1.ListCount - 1
   Write #1, List1.List(i)
Next
Close #1
End Sub

Автор: vickr 22.5.2003, 13:56
Цитата
Соблюдайте синтаксис! Пишите исходники так

Ну ты суров, братишка smile.gif

Автор: Mephisto 28.8.2003, 16:06
Цитата(cardinal @ 21.5.2003, 17:53)

Соблюдайте синтаксис! Пишите исходники так, чтобы их было легче читать. Делайте сноски в if ... else, for ... next, do while ... loop и т.д. Пишите комментарии если вы написали то, что может быть не понятно другим участникам и посетителям форума. Пишите когда указанный исходник может не работать! Просьба также помещать цитаты и куски кода в спец. рамки. Это не наезд, а попытка сделать форум лучше


Аминь. baaa.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)