VB のたまご

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



OpenFileDialog

    イメージ
  •  OpenFileDialog は、ユーザーに開きたいファイルを指定される機能を提供するコントロールです。 とりあえずどういう風に動くのか見てみましょう。 以下サンプルです。「OpenFileDialogWindow1」という画面で作成していますが、「MainWindow」に書いても構いません。

  • スポンサーリンク


    <Window x:Class="OpenFileDialogWindow1"
            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="OpenFileDialogWindow1" Height="300" Width="300">
     
        <StackPanel>
    
            <Button Content="ファイルを開く" Click="Button_Click" />
            <TextBlock Name="textblock1" />
    
        </StackPanel>
        
    </Window>
    

    Imports Microsoft.Win32
    
    Public Class OpenFileDialogWindow1
    
        Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
    
            Dim dlg = New OpenFileDialog
            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="OpenFileDialogWindow2"
            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="OpenFileDialogWindow2" Height="300" Width="300">
    
        <StackPanel>
    
            <Button Content="ファイルを開く" Click="Button_Click" />
            <TextBlock Name="textblock1" />
    
        </StackPanel>
    
    </Window>
    

    Imports Microsoft.Win32
    
    Public Class OpenFileDialogWindow2
    
        Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
    
            Dim dlg = New OpenFileDialog
            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 の OpenFileDialog と同様ですね。

  • スポンサーリンク


    <Window x:Class="OpenFileDialogWindow3"
            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="OpenFileDialogWindow3" Height="300" Width="300">
    
        <StackPanel>
    
            <Button Content="ファイルを開く" Click="Button_Click" />
            <TextBlock Name="textblock1" />
    
        </StackPanel>
    
    </Window>
    

    Imports Microsoft.Win32
    
    Public Class OpenFileDialogWindow3
    
        Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
    
            Dim dlg = New OpenFileDialog
            dlg.Filter = "テキストファイル(*.txt)|*.txt|全てのファイル(*.*)|*.*"
            dlg.FilterIndex = 1
            dlg.Title = "ファイルを選択してください"
            dlg.CheckFileExists = True
            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
    

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