VB のたまご

作成日: 2017/03/06, 更新日: 2017/03/06



SaveFileDialog

    イメージ
  •  SaveFileDialog は、ファイル保存する際にどのフォルダに、どんなファイル名で保存するかをユーザーに尋ねるコントロールです。 とりあえずどういう風に動くのか見てみましょう。 以下サンプルです。「SaveFileDialogWindow1」という画面で作成していますが、「MainWindow」に書いても構いません。

  • スポンサーリンク


    <Window x:Class="SaveFileDialogWindow1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:w04_NormalControls"
            mc:Ignorable="d"
            Title="SaveFileDialogWindow1" Height="300" Width="300">
    
        <StackPanel>
    
            <Button Content="ファイルを保存する" Click="Button_Click" />
            <TextBlock Name="textblock1" />
    
        </StackPanel>
    
    </Window>
    

    Imports Microsoft.Win32
    
    Public Class SaveFileDialogWindow1
    
        Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
    
            Dim dlg = New SaveFileDialog
            Dim result As Boolean? = dlg.ShowDialog()
            If result.HasValue AndAlso result.Value = True Then
                Me.textblock1.Text = dlg.FileName
            Else
                MessageBox.Show("キャンセルした")
            End If
    
        End Sub
    
    End Class
    

  •  ShowDialog メソッドの戻り値は、DialogResult ではなく、Nothing 許容型の Boolean 型なのに注意です。 戻り値が「Nothing」、または「False」の場合はキャンセルとみなし、「True」の場合だけ選択したとみなします。

  •  実行後、どんな種類のファイルも指定できるので、何か1つを選択したりファイル名を入力して「保存」を押すか「キャンセル」を押します。 実際には、ある種類のファイルのみ選択させるように制限をかけたいこともあるかと思います。その場合が以下のサンプルです。

  • <Window x:Class="SaveFileDialogWindow2"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:w04_NormalControls"
            mc:Ignorable="d"
            Title="SaveFileDialogWindow2" Height="300" Width="300">
    
        <StackPanel>
    
            <Button Content="ファイルを保存する" Click="Button_Click" />
            <TextBlock Name="textblock1" />
    
        </StackPanel>
    
    </Window>
    

    Imports Microsoft.Win32
    
    Public Class SaveFileDialogWindow2
    
        Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
    
            Dim dlg = New SaveFileDialog
            dlg.Filter = "テキストファイル(*.txt)|*.txt|全てのファイル(*.*)|*.*"
            dlg.FilterIndex = 1
    
            Dim result As Boolean? = dlg.ShowDialog()
            If result.HasValue AndAlso result.Value = True Then
                Me.textblock1.Text = dlg.FileName
            Else
                MessageBox.Show("キャンセルした")
            End If
    
        End Sub
    
    End Class
    

  •  Filter プロパティに保存したい拡張子を設定することで、ダイアログ表示時に保存ファイルの種類を制限することができます。 このサンプルでは、「テキストファイル」と「全てのファイル」の2種類に制限?しています。 またこの時にどれを初期値とするかを指定する FilterIndex プロパティに1始まりで番号を指定します。 ここでは「テキストファイル」の1を設定しています。

  •  表示されたダイアログには、ファイル名の下側に「テキストファイル」と保存対象の拡張子が出るようになりました。 このあたりの詳細設定系は WinForms の SaveFileDialog と同様ですね。

  • スポンサーリンク


    <Window x:Class="SaveFileDialogWindow3"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:w04_NormalControls"
            mc:Ignorable="d"
            Title="SaveFileDialogWindow3" Height="300" Width="300">
    
        <StackPanel>
    
            <Button Content="ファイルを保存する" Click="Button_Click" />
            <TextBlock Name="textblock1" />
    
        </StackPanel>
    
    </Window>
    

    Imports Microsoft.Win32
    
    Public Class SaveFileDialogWindow3
    
        Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
    
            Dim dlg = New SaveFileDialog
            dlg.Filter = "テキストファイル(*.txt)|*.txt|全てのファイル(*.*)|*.*"
            dlg.FilterIndex = 1
            dlg.Title = "保存先のファイルを指定してください"
            dlg.CheckPathExists = True
            dlg.FileName = "*.txt"
            dlg.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)
    
            Dim result As Boolean? = dlg.ShowDialog()
            If result.HasValue AndAlso result.Value = True Then
                Me.textblock1.Text = dlg.FileName
            Else
                MessageBox.Show("キャンセルした")
            End If
    
        End Sub
    
    End Class
    

  •  このサンプルでは、ダイアログのタイトルや初期ファイル名、フォルダの存在チェック、初期フォルダの指定など、 さらに細かい設定をおこなっています。