我将CommonDialog的ShowOpen设为可以多选,但是当我选择的文件多到十几个时就会出现错误,说用于存储文件名的内存太小。具体的错误如下:Run-time error "20476":
The file name buffer is too small to store the selected file name(s). (Increase MaxFileSize)请教高手如何解决?(因为只能选十几个文件不能够满足要求)。Help

解决方案 »

  1.   

    CommonDialog控件的Flags属性有一个标志cdlOFNAllowMultiselect。利用这个标志可以实现多选。如: 
        CommonDialog1.Flags = CommonDialog1.Flags + cdlOFNAllowMultiselect 
        无论是在 Windows NT 4.0 还是在 Windows 95 中,如果 cdlOFNAllowMultiselect 标志被单独使用,都不能支持长文件名。这是因为多重文件名要包括空格分隔符,而长文件名也可能包括空格符。在 Windows NT 3.5 中,无法避免这种情况。如果使用 cdlOFNAllowMultiselect,就不能看到长文件名。如果在 Windows 95 中添加 cdlOFNExplorer 标志,就可以既能文件多选,又能看到长文件名。但是,这些文件名是用空字符Chr(0)分隔符,而不是空格分隔符隔开。因此,cdlOFNAllowMultiselect 和 cdlOFNExplorer 一起使用时,在 Windows 95 和 Windows NT 3.5中需要不同的文件名所得结果的语法分析。 
        当使用 cdlOFNAllowMultiselect 标志时,可能希望增加 MaxFileSize 属性的尺寸以便对所选文件名有足够的内存。MaxFileSize 属性要分配内存以便存储所选的一个或多个文件的实际名称。该属性的范围是 1-32K。缺省值是 256。 
        下面是一个例子: 
        Option ExplicitPrivate Sub Command1_Click()
         Dim I As Integer
         Dim Y As Integer
         Dim Z As Integer
         Dim FileNames$()
         CommonDialog1.MaxFileSize = 32000'原因就是这个属性值没有指定为足够大,默认为255
         CommonDialog1.FileName = ""
         CommonDialog1.Filter = "All Files|*.*"
         CommonDialog1.Flags = cdlOFNAllowMultiselect + cdlOFNExplorer
         CommonDialog1.ShowOpen     
     End Sub
      

  2.   

    CommonDialog 控件常数
    文件打开/保存对话框标记
    常数 值 描述 
    cdlOFNAllowMultiselect &H200  指定文件名列表框允许多种选择。 
    用户在运行时 可按下 SHIFT 键选择多个文件并用 UP ARROW 与 DOWN ARROW 键选择所要。然后,FileName 属性包含所有选定文件的字符串。用空格来为字符串中的名字分界。
     
    cdlOFNCreatePrompt &H2000  指定对话框提示用户创建当前不存在的文件。该标记自动设置 cdlOFNPathMustExist 与 cdlOFNFileMustExist 标记。 
    cdlOFNExplorer &H80000  使用“Explorer-like Open A File”对话框模板。在 Windows 下使用 Windows 95 外壳时,使用该标记的公共对话框不工作。 
    CdlOFNExtensionDifferent &H400  指出被返回的文件名的扩展名不同于 DefaultExt 属性指定的扩展名。如果 DefaultExt 属性是Null,如果扩展名匹配,或者如果文件无扩展名,则都不设置该标记。关闭了对话框后就可检查该标记值。 
    cdlOFNFileMustExist &H1000  指定用户可只在文件名文本框中输入现有文件名。如果设置了该标记,而且用户输入一个无效文件名,则将出现一个警告。该标记自动设置 cdlOFNPathMustExist 标记。 
    cdlOFNHelpButton &H10  使对话框显示帮助按钮。 
    cdlOFNHideReadOnly &H4  隐藏只读复选框。 
    cdlOFNLongNames &H200000  使用长文件名。 
    cdlOFNNoChangeDir &H8  强制对话框将当前目录设置成在打开对话框时的目录。 
    CdlOFNNoDereferenceLinks &H100000  不间接引用外壳链接(所谓快捷方式)。根据缺省,选择外壳链接回使外壳间接引用它。 
    cdlOFNNoLongNames &H40000 不使用长文件名。 
    CdlOFNNoReadOnlyReturn &H8000  指定被返回的文件将不会有只读属性设置,也不会在写保护目录中。 
    cdlOFNNoValidate &H100  指定公共对话框在被返回的文件名中允许无效字符。 
    cdlOFNOverwritePrompt &H2  如果被选择的文件已经存在,则使“另存为”对话框生成消息框。用户必须确认是否覆盖文件。 
    cdlOFNPathMustExist &H800  指定用户可只输入有效的路径。如果设置该标记且用户输入无效路径,则出现一个警告消息。 
    cdlOFNReadOnly &H1  使在创建对话框时,开始检查只读复选框。在关闭对话框时,该标记也指出只读复选框的状态。 
    CdlOFNShareAware &H4000  指定将忽略共享冲突错误。 
    “颜色”对话框标记
    常数 值 描述 
    cdlCCFullOpen &H2  显示整个对话框,包括定义自定义颜色区 
    cdlCCShowHelp &H8  使对话框显示帮助按钮 
    cdlCCPreventFullOpen &H4  使定义自定义颜色按钮无效,并防止用户定义自定义颜色 
    cdlCCRGBInit &H1  设置对话框的初始颜色值 
    “字体”对话框标记
    常数 值 描述 
    cdlCFANSIOnly &H400  指定对话框只允许选择使用 Windows 字符设置的字体。如果设置该标记,则用户将不能选择只包含符号的字体。 
    cdlCFApply &H200  启动对话框上的应用按钮。 
    cdlCFBoth &H3  使对话框列举可用的打印机与屏幕字体。hDC 属性识别与打印机相关联的设备描述体。 
    cdlCFEffects &H100  指定对话框使划线、下划线与颜色生效。  
    cdlCFFixedPitchOnly &H4000  指定对话框只选择固定间距的字体。 
    cdlCFForceFontExist &H10000  指定如果用户要选择不存在的字体或式样,则显示错误消息框。 
    cdlCFHelpButton &H4  使对话框显示帮助按钮。 
    cdlCFLimitSize &H2000  指定对话框只在 Min 与 Max 属性指定的范围内选择字体大小。 
    cdlCFNoFaceSel &H80000  未选择字体名称。 
    cdlCFNoSimulations &H1000  指定对话框不允许图形设备接口 (GDI) 字体模拟。 
    cdlCFNoSizeSel &H200000  未选择字体大小。 
    cdlCFNoStyleSel &H100000   
    cdlCFNoVectorFonts &H800  指定对话框不允许选择矢量字体。 
    cdlCFPrinterFonts &H2  使对话框只列举 hDC 属性指定的打印机所支持的字体。 
    cdlCFScalableOnly &H20000  指定对话框只允许选择可缩放的字体。 
    cdlCFScreenFonts &H1  使对话框只列举系统支持的屏幕字体。 
    cdlCFTTOnly &H40000  指定对话框只允许选择 TrueType 字体。 
    cdlCFWYSIWYG &H8000  指定对话框只允许选择既可在打印机上又可在屏幕上使用的字体。如果设置该标记设置,则也应设置 cdlCFBoth 与 cdlCFScalableOnly 标记。 
    “打印”对话框标记
    常数 值 描述 
    cdlPDAllPages &H0  返回或设置所有页选项按钮的状态。 
    cdlPDCollate &H10  返回或设置分页复选框的状态。 
    cdlPDDisablePrintToFile &H80000  使打印到复选框无效。 
    cdlPDHelpButton &H800  使对话框显示帮助按钮。 
    cdlPDHidePrintToFile &H100000  隐藏打印到文件复选框。 
    cdlPDNoPageNums &H8  使页选项按钮与相关联的编辑控件无效。 
    cdlPDNoSelection &H4  使选择选项按钮无效。 
    cdlPDNoWarning &H80  防止在没有缺省打印机时显示警告消息。 
    cdlPDPageNums &H2  返回或设置页选项按钮的状态。 
    cdlPDPrintSetup &H40  使系统显示“打印设置”对话框而不是“打印”对话框。 
    cdlPDPrintToFile &H20  返回或设置打印到文件复选框的状态。 
    cdlPDReturnDC &H100  返回设备描述体 以在对话框中选择打印机。在对话框的 hDC 属性中返回设备描述体。 
    cdlPDReturnDefault &H400  返回缺省打印机名称。 
    cdlPDReturnIC &H200  返回信息上下文以在对话框中选择打印机。 信息上下文提供快速方法获得有关设备的信息,而不必创建设备描述体。在对话框 hDC 属性中返回信息上下文。 
    cdlPDSelection &H1  返回或设置选择选项按钮的状态。如果既没有指定 cdlPDPageNums 也没有指定 cdlPDSelection,则所有选项按钮处在选择状态中。 
    cdlPDUseDevModeCopies &H40000  如果打印机驱动程序不支持多个复本,则设置该标记使复本编辑控件无效。如果驱动程序支持多个复本,则设置该标记指出对话框在复本属性中存储所需数量的复本。 
    Help 常数
    常数 值 描述 
    cdlHelpCommandHelp &H102  对具体命令显示帮助 
    cdlHelpContents &H3  显示当前帮助文件中的内容主题 
    cdlHelpContext &H1  对具体主题显示帮助 
    cdlHelpContextPopup &H8  显示上下文号识别的主题 
    cdlHelpForceFile &H9  创建帮助文件,它只用一种字体显示文本 
    cdlHelpHelpOnHelp &H4  显示帮助来使用帮助应用程序本身 
    cdlHelpIndex &H3  显示被指定的帮助文件索引 
    cdlHelpKey &H101  对具体关键字显示帮助 
    cdlHelpPartialKey &H105  在 Windows 帮助中调用搜索引擎 
    cdlHelpQuit &H2  指出指定帮助文件的帮助应用程序不再被使用 
    cdlHelpSetContents &H5  指定特定主题作为内容主题 
    cdlHelpSetIndex &H5  对多索引帮助设置当前索引