主婦と.NETと犬のぶろぐ

奥様 と プログラム と お犬様 の 楽しい日常

目次

Blog 利用状況

ニュース

書庫

日記カテゴリ

OpenFileDialog(System.Windows.Forms.OpenFileDialog)

いつもちょっと疑問に思うこと。FilterIndex の指定がなんかへん。なんで 1 からなんだ?なんで 0 を指定しても 1 と同じ動きすんだ?

名前のせいなのか、勘違いされやすいのが RestoreDirectory。

# 追記(ワタシも勘違いしてました...orz)
# コメント及びコメント欄を参照ください。

一応書いておくと、たとえば InitialDirectory を デスクトップにしたとします。
そんで ユーザーがボタンを押すなどして OpenFileDialog.ShowDialog した後に、
ユーザーが \...\デスクトップ\ふじこ\ひるね フォルダに移動して、
ユーザーが \...\デスクトップ\ふじこ\ひるね\あくび.TXT を選択して [開く]を押下します。
一回目の操作はコレで終わり。
二回目、ユーザーが再度ボタンを押すなどして OpenFileDialog.ShowDialog した時、
InitialDirectory の デスクトップでなくて、\...\デスクトップ\ふじこ\ひるね を開く
というだけのもの。

# ↑ これは、FileName プロパティによるものだそうです。
# FileName に 値がセットしてある場合、InitialDirectory は無視され、初期ディレクトリは FileName のファイルがあるディレクトリになるそうです。
# RestoreDirectory = False は、System.Environment.CurrentDirectory が 上記例だと \...\デスクトップ\ふじこ\ひるね になり、
# RestoreDirectory = True は CurrentDirectory はいったん変わるものの、ShowDialog  から抜けると CurrentDirectory の元の値を復帰します。

削除しても復元してくれるとかそんなんじゃないす。

■参考文献
OpenFileDialog クラス
OpenFileDialog コンポーネント (Windows フォーム)

■実行画像
ごてごてな OpenFileDialog
NumericUpDown

Public Class OpenFileDialogTest

Private Sub OpenFileDialogTest_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load With Me.OpenFileDialog1 ' 既定:True .AddExtension = True ' 存在しないファイルを指定した場合に警告を出す(既定:True) .CheckFileExists = True ' 存在しないパスを指定した場合に警告を出す(既定:True) .CheckPathExists = True ' 拡張子が指定されない場合の既定の拡張子を指定 .DefaultExt = "txt" ' ショートカットを指定した場合、ショートカット自体を選択するか ' 実体を選択するかを指定(既定:True) .DereferenceLinks = True ' 選択されているファイル名 .FileName = "" ' [ファイルの種類] ボックスに表示される選択肢 .Filter = "テキスト(*.txt)|*.txt|イメージ(*.bmp;*.jpg;*.png)|*.bmp;*.jpg;*.png|ふじこえでん(*.fujiko.eden)|*.fujiko.eden" ' Filter でいくつか指定した時にどれを最初に表示するか(これだとイメージが表示) .FilterIndex = 2 ' 既定で選択されてるディレクトリ .InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) ' 複数選択を許可するか否かの指定(既定:False) .Multiselect = False ' [読み取り専用ファイルとして開く]チェックボックスを表示するか否か(既定:False) .ShowReadOnly = True ' [読み取り専用ファイルとして開く]チェックボックスのチェックの状態(既定:False) .ReadOnlyChecked = True ' Environment.CurrentDirectory をユーザーが指定した場所に変更するか否か(既定:False) .RestoreDirectory = True ' ヘルプボタンを表示するか否か(既定:False) .ShowHelp = True ' ダイアログ ボックスが複数のファイル名拡張子をを受け入れるか否か(既定:False) ' Filter で指定した *.fujiko.eden で、hoge.fujiko.eden の拡張子を .eden とするか .fujiko.eden とするか .SupportMultiDottedExtensions = True ' タイトル .Title = "ふぁいるをしていしてね" ' 有効な Win32 ファイル名だけを受け入れるかどうか(既定:True) .ValidateNames = True End With End Sub
Private Sub OpenFileDialogTest_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.DoubleClick ' Form をダブルクリックして OpenFileDialog を開く Dim result As DialogResult = Me.OpenFileDialog1.ShowDialog(Me) End Sub
' OpenFileDialog で 開くボタン押下時 Private Sub OpenFileDialog1_FileOk(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk Dim filePath As String = Me.OpenFileDialog1.FileName Dim ext As String = System.IO.Path.GetExtension(filePath).ToLower() Dim st As System.IO.Stream = Me.OpenFileDialog1.OpenFile()
Me.ClearControls() Dim sz As Size = New Size(250, 250) Dim lc As Point = New Point(10, 10) If ext.Contains("bmp") OrElse ext.Contains("jpg") OrElse ext.Contains("png") Then ' 画像だったら PictureBox に表示 Dim pic As PictureBox = New PictureBox() pic.Size = sz pic.SizeMode = PictureBoxSizeMode.Zoom pic.Location = lc pic.Image = Bitmap.FromStream(st) Me.Controls.Add(pic) Else ' 画像以外だったら TextBox に表示 Dim txt As TextBox = New TextBox() txt.Multiline = True txt.ScrollBars = ScrollBars.Both txt.Size = sz txt.Location = lc txt.Text = New System.IO.StreamReader(st, System.Text.Encoding.Default).ReadToEnd Me.Controls.Add(txt) End If End Sub
' OpenFileDialog で ヘルプボタン押下時 Private Sub OpenFileDialog1_HelpRequest(ByVal sender As Object, ByVal e As System.EventArgs) Handles OpenFileDialog1.HelpRequest Dim ofd As OpenFileDialog = DirectCast(sender, OpenFileDialog) MessageBox.Show(ofd.Title) ' OpenFileDialog の Title をメッセージ表示 End Sub
Private Sub ClearControls() For Each ctrl As Control In Me.Controls Me.Controls.Remove(ctrl) ctrl.Dispose() Next End Sub End Class

投稿日時 : 2007年3月1日 11:55

Feedback

# re: OpenFileDialog(System.Windows.Forms.OpenFileDialog) 2007/03/01 12:00 επιστημη

コードそっちのけでふじこのサムネイルに見入っちゃうんですケド
# それはそれで善し ^^;

# re: OpenFileDialog(System.Windows.Forms.OpenFileDialog) 2007/03/01 12:40 渋木宏明(ひどり)

>二回目、ユーザーが再度ボタンを押すなどして...というだけのもの。

「再度xxxフォルダを開く」というのは結果であって、それよりももっと重要な役割があります。

# re: OpenFileDialog(System.Windows.Forms.OpenFileDialog) 2007/03/01 12:52 なおこ(・∀・)

>> えぴさん
(^^)

>> ひどりさん
> それよりももっと重要な役割があります。
何だろう...教えてください~!!

# re: OpenFileDialog(System.Windows.Forms.OpenFileDialog) 2007/03/01 12:55 シャノン

FilterIndex が1からなのは、Win32 のコモンダイアログを引きずっているせいですね。
FilterIndex = 0 は、ユーザ定義のカスタムフィルタを表します。
この仕様は難解でよくわからん。
詳しくは Win32 API の OPENFILENAME 構造体を参照。

> 名前のせいなのか、勘違いされやすいのが RestoreDirectory。

違います。
RestoreDirectory = false だと、ファイルを選んだ時に、カレントディレクトリ(Environment.CurrentDirectory)が、そのファイルのあるディレクトリになってしまいます。
RestoreDirectory = true だと、それが阻止されます。

InitialDirectory が無視されるのは、FileName に1回目のファイル名が残っているから。
FileName プロパティが設定されていると、InitialDirectory は無視され、初期ディレクトリはそのファイルがあるディレクトリになります。

# re: OpenFileDialog(System.Windows.Forms.OpenFileDialog) 2007/03/01 13:28 なおこ(・∀・)

>> シャノンさん
おぉ。。。いつもありがとうございます(*_ _)
RestoreDirectory についての記述を
シャノンさんのコメントを元に修正しました。

# re: OpenFileDialog(System.Windows.Forms.OpenFileDialog) 2007/03/02 14:11 渋木宏明(ひどり)

>RestoreDirectory = true だと、それが阻止されます。

阻止はされなくて、一旦そのディレクトリにカレントディレクトリが移されるけど、ShowDialog() から抜ける時に「復帰」さえます。

# re: OpenFileDialog(System.Windows.Forms.OpenFileDialog) 2007/03/02 20:23 なおこ(・∀・)

>> ひどりさん
ありがとうございます。

っていうか RestoreDirectory ...(@_@;)
MSDN のあの説明じゃそこまで読み取れない...

# SaveFileDialog(System.Windows.Forms.SaveFileDialog) 2007/03/26 10:02 主婦と.NETと犬のぶろぐ

SaveFileDialog(System.Windows.Forms.SaveFileDialog)

# FoPautineBF 2014/08/28 8:12 http://crorkz.com/

2VmzhS Thanks for another magnificent article. Where else could anyone get that type of info in such an ideal way of writing? I have a presentation next week, and I am on the look for such info.

# re: OpenFileDialog(System.Windows.Forms.OpenFileDialog) 2016/04/26 11:33 sdf

http://www.oakleysunglassesa.us.com/
http://www.oakley-sunglass.us.com/
http://www.oakleysunglasses.qc.com/
http://www.rayban-sunglasses.net.co/
http://www.raybansunglasses.qc.com/
http://www.ray-banoutlet.name/
http://www.polo--ralphlauren.net/
http://www.ralphlauren-outlet.in.net/
http://www.burberryoutletonline.org/
http://www.burberry-outletsale.us.com/
http://www.toms-shoes.us.org/
http://www.tomsoutlet.com.co/
http://www.michaelkorsoutletonlinestoresale.us.com/
http://www.michaelkors-outlet-online.net/
http://www.christian--louboutin.net/
http://www.tory--burch.org/
http://www.toryburch-outlet.net/
http://www.gucci--outlet.org/
http://www.guccioutletsale.in.net/
http://www.cheap-jordan-shoes.net/
http://www.air-jordan.in.net/
http://www.cheap-jordans.in.net/
http://www.jordansretro.in.net/
http://www.nikeshoesinc.net/
http://www.nike-shoes.in.net/
http://www.air-max-2015.net/
http://www.airmax-90.in.net/
http://www.airmax-95.in.net/
http://www.nike-free-run.net/
http://www.nikefree-5.com/
http://www.chanel--handbags.net/
http://www.chanelbags-outlet.us/
http://www.true-religion.cc/
http://www.north-faceoutlet.in.net/
http://www.coach-outlet-store.in.net/

# re: INCREASEUSERVA 2016/12/10 14:04 meadc

http://www.coach-sunglasses.co/ coach sunglasses
http://www.raybansunglasses.com.au ray-ban sunglasses

# re: INCREASEUSERVA 2016/12/10 14:06 meadc

http://www.pandora-bracelets.us pandora bracelets
http://www.ralphlauren-shirts.co.uk/ ralph lauren shirts
http://burberry.outlet.net.au/ burberry outlet
http://www.sheepskinboots.us/ sheepskin boots
http://www.shoes-online.us/ shoes online sale
http://www.hermesbirkin.co.uk/ hermes birkin
http://www.oakley-sunglasses.net.au oakley sunglasses
me adc12.10

タイトル  
名前  
Url
コメント