DOBON.NET DOBON.NETプログラミング掲示板過去ログ

SaveFileDialogで特定のファイルの種類を選択させない。

環境/言語:[環境(WindowsXP)使用言語(VB2008)]
分類:[.NET]

はじめまして、いつもお世話になっております。

SaveFileDialogのファイルの種類で選択項目として上がっている
特定のファイルの種類の項目を、選択できないようにしたいのですが、
可能でしょうか?

たとえば、ファイルの種類のコンボボックス内で
"Microsoft Office Excel 2003 ブック (*.xls)"
"Microsoft Office Excel 2007 ブック (*.xlsx)"


と言うように2種類のファイル形式が選択できる状態ではあるが、
Microsoft Office Excel 2003 ブック (*.xls)形式しか
選択できない、という具合です。

ご教授の程、よろしくお願いたします。
■No21560に返信(nikoさんの記事)
> と言うように2種類のファイル形式が選択できる状態ではあるが、
> Microsoft Office Excel 2003 ブック (*.xls)形式しか
> 選択できない、という具合です。
>

意図がよく分からないですね、
フィルターで最初から選択させる項目のみにするのでは駄目なのですか?
画面に選択できる状態で片方しか選べないようにするのは、いい方法には
思えませんが、何か理由があるのですよね。
はじめまして、引っ込んだ略と申します。

 とりあえず、SaveFileDialogのFileOkイベントを使うとできそうです。
 以下のコードで試してみてください。
 # もし外れていたらごめんなさい。
 # やじゅさんとタイミングが重なってしまいました・・・(汗

Public Class Form1
    Inherits Form

    Dim WithEvents m_sfd As New SaveFileDialog

    Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
        MyBase.OnLoad(e)
        m_sfd.InitialDirectory = Application.StartupPath
        m_sfd.Filter = "Microsoft Office Excel 2003 ブック (*.xls)|(*.xls)|Microsoft Office Excel 2007 ブック (*.xlsx)|(*.xlsx)"
    End Sub
    ' ↓FormをダブルクリックするとSaveFileDialogが開きます。
    ' ↓(ボタンを配置するのが面倒だったので・・・)
    Protected Overrides Sub OnDoubleClick(ByVal e As System.EventArgs)
        If m_sfd.ShowDialog() = Windows.Forms.DialogResult.OK Then
            MsgBox("OK!!  " + m_sfd.FileName)
        Else
            MsgBox("NG!!  " + m_sfd.FileName)
        End If
        MyBase.OnDoubleClick(e)
    End Sub
    Private Sub m_sfd_FileOk(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles m_sfd.FileOk
        If System.IO.Path.GetExtension(m_sfd.FileName) <> ".xls" Then
            MsgBox(".xlsしか使えません")
            e.Cancel = True
        End If
    End Sub
End Class

以上です。
引っ込んだ略と申します。
 
 私のコードにミスがあったため、訂正いたします。失礼しました。
 (前回投稿に削除キーを入れ忘れていました)

        m_sfd.Filter = "Microsoft Office Excel 2003 ブック (*.xls)|(*.xls)|Microsoft Office Excel 2007 ブック (*.xlsx)|(*.xlsx)"
                    ↓
        m_sfd.Filter = "Microsoft Office Excel 2003 ブック (*.xls)|*.xls|Microsoft Office Excel 2007 ブック (*.xlsx)|*.xlsx"

以上です。
>やじゅさん
エクセルファイルの関連付されたアプリケーションでExcel2007が指定されていた場合に両方使用できるようにして、それ以外は.xlsファイルしか使用できないようにしたかったのです。
両方が選択できるという状態にしたのには、.xlsxファイルでも保存できますよとユーザ側に教えたいと言う意図があったためです。

>引っ込んだ略さん
この方法であれば、選択はできますが保存させない事ができますね。
参考になりました、ありがとうございます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板