СообЧа > База Знаний > Программирование > Visual Basic > Формы и элементы управления

Вопрос

Нужно создать меню последних открытых файлов в программе.
Как это сделать?

Ответ

Создаешь, например, 5 пунктов меню. Скрытые, кэпшна нет, тег пустой. При загрузке читаешь последние открытые файлы из реестра/INI, если таковые есть — заполняешь меню: тег — полный путь к файлу, кэпшн — только имя файла, визибл = тру. При открытии очередного файла сдвигаешь все на один пункт вниз (самый «давнооткрытый» файл при этом «забывается). В первое меню добавляешь новый файл по той же схеме. Пишешь его в реестр/INI. При щелчке на меню (лучше делать массив с одним именем) делаешь что-то вроде:

Sub mnuMRU_Click (Index as Integer)
  OpenFile mnuMRU(Index).Tag
End Sub


Savenger

В режиме дизайна создай элемент меню, имеющий Caption равный "-". Этот элемент будет представлять собой разделитель имен файлов (обычно список файлов отделяют таким разделителем). Если разделитель не нужен, поставь Visible=false. ОЧЕНЬ ВАЖНО!!!___ поставь Index=0.

Далее нет ничего сложного. Но много писанины.
lngCount — здесь хранишь количество элементов, сохраненных в реестре
mnuFileRecent — имя менюшки, которое ты создал в предыдущем шаге.

For i = 1 To lngCount
   'Загрузим следующий элемент.
   Load mnuFileRecent(i)
   'Новосозданный элемент еще не видим. Исправим положение.
   mnuFileRecent(i).Visible = True
   'Загрузим путь из реестра
   strText=GetSetting(…)
   'Присвоим Caption
   'Тут я попытался добавить в список только имя файлы.
   mnuFileRecent(i).Caption = left(strtext,instrrev(strtext,"\"))
   'В свойство Tag запишем полный путь.
   mnuFileRecent.tag=strText
Next i

При клике на этом меню загружаешь файл mnuFileRecent(index).tag
Добавлять элемент можно простым циклом. Есди mnuFileRecent.ubound меньше макс. кол-ва файлов, сначала загрузи еще один элемент:
lngMaxCount — макс. кол-во файлов

if mnuFileRecent.ubound < lngMaxCount then
   'Загрузим элемент меню, индекс которого на 1 больше кол-ва,
   'элементов в списке.
   load mnuFileRecent(mnuFileRecent.ubound+1)
   'Теперь просто обращаемся к самому «высокому» элементу
   mnuFileRecent(mnuFileRecent.ubound).visible=true
end if

for i = mnuFileRecent.ubound to 2
 mnuFileRecent(i).caption=mnuFileRecent(i-1).caption
next i

mnuFileRecent(1).caption=strFileName


Кривокрисенко



Copyright © 2000-2004 Сообщество Чайников
Контактная информация