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

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

Эта статья на английском языке:106682
Эта статья помещена в архив. Она предлагается "как есть" и обновляться не будет.
Проблема
Общие диалогового окна пользовательского элемента управления (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-файл. Однако VisualBasic игнорирует 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, система не использует какие-либо фильтры и не показывать все файлы в списке имя файла диалогового окна.
2,00 3,00 4.00 vb416 vb4win

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 106682 — последний просмотр: 12/04/2015 09:49:42 — редакция: 4.0

Microsoft Visual Basic 3.0 Professional Edition, Microsoft Visual Basic 4.0 Professional Edition

  • kbnosurvey kbarchive kbprb kbmt KB106682 KbMtru
Отзывы и предложения