PRB: Расширение по умолчанию игнорирует тип файла в диалоговом окне Общие VB

Переводы статьи Переводы статьи
Код статьи: 106682 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Проблема

Общие диалогового окна пользовательского элемента управления (CMDIALOG.VBX) не может определить, какой файл в диалоговом окне Открыть или сохранить как в списке Тип файлов выберите тип. Тип выбранного файла правильно отображает существующие файлы этого типа и фильтры из других файлов. Тем не менее, который не может обнаружить код Visual Basic Выбранный тип файла.

Кроме того не является расширение имени файла по умолчанию, задайте в свойстве DefaultExt влияет на изменения, внесенные в списке Тип файлов. В результате файл имя, которое вводится без расширения будет иметь расширение DefaultExt вместо выбора в списке Тип файлов.

Выше поведение Открытие файла и сохранение файла отличается от многих другие приложения Windows, таких как Microsoft Excel. Microsoft Excel определяет, какие Тип файла фильтра выберите и автоматически добавляет расширение любое имя файла, который можно вводить без расширения.

Причина

Данное поведение является особенностью в общий элемент управления диалогового окна в Visual Basic.

Временное решение

Вместо использования Visual Basic общего диалогового окна пользовательского элемента управления, можно написать Подпрограмма DLL в C, чтобы вызвать общих подпрограмм диалоговое окно Windows расположенный в COMMDLG.DLL. затем можно вызвать эту библиотеку DLL с помощью Visual Basic.

Статус

Данное поведение является особенностью. Изменение макета — рассматривается и будет рассматриваться для включения в будущем выпуске.

Дополнительная информация

Примечание: В Visual Basic 4.0 общего диалогового окна свойства name должно быть изменено с CommonDialog1 на CMDialog1.

Действия для воспроизведения поведения

  1. Начать новый проект в Visual Basic. По умолчанию создается форма Form1.
  2. Общий элемент управления диалогового окна добавьте в форму Form1. Для этого необходимо CMDIALOG.VBX для необходимо загрузить в Visual Basic. Можно загрузить CMDIALOG.VBX автоматически через AUTOLOAD.Файл ключа MAK или с помощью команды Добавить файл из файла меню.
  3. Добавьте следующий код события Load формы:
       Sub Form_Load ()
    
         ' Enter the following two lines as one, single line:
         CMDialog1.Filter = "Text Files *.Txt|*.Txt|Basic Files *.Bas|*.Bas|
            All Files *.*|*.*"
         CMDialog1.FilterIndex = 1  'Sets default filter to *.txt.
    
         CMDialog1.DefaultExt = "TXT"  'Default extension if you enter none.
         ' In the dialog box, the default extension will be applied only if you
         ' enter the filename with no period. If you type the file name with
         ' a period and no extension (such as FILEX.), then CMDialog1.Filename
         ' always returns a blank extension.
    
         ' Set the common dialog Action property to 1 to execute the File Open
         ' dialog or 2 to execute the File Save As dialog:
         CMDialog1.Action = 1  ' 1=Invokes the File Open common dialog box.
    
       ' Limitation: The value of FilterIndex doesn't change even if you change
       ' the file type in the Open common dialog box:
         Debug.Print CMDialog1.FilterIndex
    
        ' The Filename property displays the filename and path that you entered
         ' in the Open dialog:
         Debug.Print CMDialog1.Filename  'Prints filename with path prefix
         ' Debug.Print CMDialog1.Filetitle 'Prints filename without path
    
       End Sub
    
    						
  4. Запуск программы или нажмите клавишу F5. Теперь отображает диалоговое окно открытия.
  5. В списке Тип файлов, выберите основные файлы *.BAS. В поле имя файла Введите имя файла например TESTFILE без расширения и период. Нажмите кнопку ОК.

    Теперь в окне отладки отображается следующие ограничения:

    1. Свойство CMDialog1.FilterIndex хранит его значение 1. CMDialog1.FilterIndex не изменяется в ответ на изменение Тип файла в диалоговом окне Открыть. Данное поведение является особенностью в Общие диалогового окна пользовательского элемента управления в Visual Basic.
    2. Свойство CMDialog1.Filename возвращает C:\VB\TESTFILE.TXT, являющийся Имя файла, введенное плюс расширение по умолчанию.TXT. Обратите внимание, что Программа не может определить тип файла, выбранного в диалоговом окне открытия поле. Расширение по умолчанию.TXT, задайте в свойстве DefaultExt независимо от изменений в списке Тип файлов. Это Дизайн ограничения общего диалогового окна пользовательского элемента управления в Visual Basic.
Примечание: Имена файлов, введите расширение сохранить это расширение, как Желаемая.

Временное решение для программистов Windows API

Передайте Visual Basic общего диалогового окна пользовательских элементов управления для открытия и сохранения Свойство FilterIndex, их функции Windows API функцией GetOpenFileName. Функцией GetOpenFileName находится в Windows COMMDLG.DLL-файл. Однако Visual Basic игнорирует nFilterIndex значение, которое функция функцией GetOpenFileName Возвращает. Конструкция программы Visual Basic нет доступа к структуре возвращаемые функцией функцией GetOpenFileName, даже при вызове подпрограмм API-Интерфейса.

Можно писать собственные программы DLL C, чтобы вызвать общее диалоговое окно Windows подпрограммы, расположенный в COMMDLG.DLL. затем вызывают эту библиотеку DLL с помощью Visual Basic. Следующая документация из Windows Software Development Kit (SDK) Описание способов использования элемента nFilterIndex структура, переданная Функцией GetOpenFileName:
nFilterIndex:
Указывает индекс в буфере, на который указывает элемент lpstrFiler. Система использует значение индекса для получения пары строк для использования в качестве Описание начального фильтра и шаблон фильтра для диалогового окна. Первая пара строк имеет значение индекса 1. Когда пользователь выбирает кнопку ОК, чтобы закрыть диалоговое окно, система копирует индекс Выбранный фильтр строк в этом месте. Если nFilterIndex член равен 0, в буфер, на который указывает фильтр используется lpstrCustomFilter член. Если член nFilterIndex равно 0 и член lpstrCustomFilter имеет значение NULL, система использует первый фильтр в буфер, на который указывает элемент lpstrFilter. Если каждый из трех члены — 0 или NULL, система не использует какие-либо фильтры и не показывать все файлы в списке имя файла диалогового окна.

Свойства

Код статьи: 106682 - Последний отзыв: 1 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Visual Basic 3.0 Professional Edition
  • Microsoft Visual Basic 4.0 Professional Edition
Ключевые слова: 
kbprb kbmt KB106682 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:106682
Заявление об отказе относительно содержимого статьи о продуктах, поддержка которых прекращена
Эта статья содержит сведения о продуктах, поддержка которых корпорацией Майкрософт прекращена. Поэтому она предлагается как есть и обновляться не будет.

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com