Microsoft KB Archive/110185

From BetaArchive Wiki

Article ID: 110185

Article Last Modified on 10/30/2003



APPLIES TO

  • Microsoft Visual Basic 3.0 Professional Edition
  • Microsoft Visual Basic 3.0 Professional Edition



This article was previously published under Q110185

SYMPTOMS

The following behavior occurs with the Open file dialog box of the Common Dialog custom control when you set the Flags property to &H200& or OFN_ALLOWMULTISELECT, to allow selection of more than one file at once.

If you highlight more than about 20 files at once in the Open file dialog box, the following error message displays when you click the OK button:

The buffer at which the member lpstrFile points is too small.


Or, if error trapping is on, the Err function reports error number 20476.

In the Visual Basic environment, if you press F5 or choose Continue from the Run menu after getting this error, you get the following error message:

Invalid filename.

CAUSE

This behavior occurs when the length of the Open dialog string containing the file names exceeds 256, the default MaxFileSize property value.

RESOLUTION

To resolve the problem, increase the MaxFileSize property to 2048:

   CMDialog1.MaxFileSize = 2048
                


2048 is the maximum string size for the Common Dialog File-Open box. 256 is the default.

STATUS

This behavior is by design.

MORE INFORMATION

You can set the Flags property of the Common Dialog to &H200&, or OFN_ALLOWMULTISELECT, to allow multiple selections in the File Name list box. You can select more than one file at run time by pressing the SHIFT key and using the UP and DOWN ARROW keys to select the desired files. The FileName property returns a string containing the names of all selected files. The names in the string are delimited by spaces.

Steps to Reproduce Behavior

  1. Start a new project in Visual Basic. Form1 is created by default.

    If the common dialog CMDIALOG.VBX file is not automatically loaded by AUTOLOAD.MAK in Visual Basic, load CMDIALOG.VBX as follows: choose Add File from the File menu, and select CMDIALOG.VBX from your WINDOWS\SYSTEM directory.
  2. Add a Common Dialog custom control to Form1.
  3. Add the following to the Form Load event code:

       Sub Form_Load ()
          CMDialog1.Flags = &H200&   ' Allows selection of more than 1 file.
          CMDialog1.Filter = "ALL|*.*"   ' File types to list in file box.
          ' CMDialog1.MaxFileSize = 2048  ' Add this to correct the behavior.
          CMDialog1.Action = 1      ' Action 1 = standard Open file dialog box
       End Sub
    
                            
  4. Start the program (or press F5). Select 20 or files at once by selecting the first article then pressing SHIFT+END. That highlights all files down to the last article. Choose the OK button. The following error message displays if the number of characters in all the selected file names, plus one character for each file name, exceeds 256:

    The buffer at which the member lpstrFile points is too small.

    If error trapping (On Error Goto) is on, the Err function reports error number 20476. In the Visual Basic environment, if you press F5 or choose Continue from the Run menu after getting this error, you get the following error message:

    Invalid filename.

To improve this behavior, add the CMDialog1.MaxFileSize=2048 statement before setting the CMDialog1 Action property to 1. This increases the maximum allowed returned string size from 256 to 2048.

REFERENCES

The following corrections apply to the "Language Reference":

  • On page 363 for the MaxFileSize property, change the "Applies to:" section to read "Common dialog (file dialogs)." Also say that the maximum MaxFileSize property value is 2048.
  • On page 89, add MaxFileSize and FilterIndex to the Common Dialog Control "Properties (File Dialogs)" section.



Additional query words: 3.00

Keywords: kbprb KB110185