限定しりとり

C# OpenFileDialogで指定した拡張子以外のファイルが選ばれた際のエラー処理

いつもお世話になっております。

唐突な質問で申し訳ございません。


現在、C#でOpenFileDialogによってcsv形式のファイルを選択し、ダイアログを閉じた後、
テキストボックスにファイルのパス(名前)の表示をしようとしています。

その際、もしcsv形式のファイルが選ばれなかったときに
「csv形式のファイルを選択してください」などのエラーを表示させようと思っています。


ファイルのパスを表示させるまではできましたが、エラーを表示させる判断の処理をどうしてよいのかわかりません。
どなたかご教授おねがいします。
あと当方、初心者ですので、コードなど載せてくださるとありがたいです。

以上、よろしくお願いします。

A 回答 (2件)

↓こんな感じでしょうか。



=================================================================
using System;
using System.Windows.Forms;

namespace CsTest3
{
public partial class Form1 : Form
{
private OpenFileDialog ofd;

public Form1()
{
InitializeComponent();

ofd = new OpenFileDialog();
ofd.FileOk += new System.ComponentModel.CancelEventHandler(this.ofd_FileOk);
}

private void button1_Click(object sender, EventArgs e)
{
if(ofd.ShowDialog() == DialogResult.OK ) {
textBox1.Text = ofd.FileName;
}
}

private void ofd_FileOk(object sender, System.ComponentModel.CancelEventArgs e)
{
if( System.IO.Path.GetExtension(ofd.FileName).ToLower() != ".csv" )
{
MessageBox.Show(".csv ファイルを選択してください。", this.textBox1.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
e.Cancel = true;
}
}
}
}
=================================================================

上の例では、
ofd = new OpenFileDialog();
ofd.FileOk += new System.ComponentModel.CancelEventHandler(this.ofd_FileOk);
でダイアログ、および、イベントを指定していますが、デザイン画面配置する場合は、

FileOpenDialog をクリック

プロパティウィンドウのイベント(雷のアイコン)をクリックしてイベントを表示させる

FileOk にプロシージャ名を入力

とすることもできます。
    • good
    • 0

拡張子で判断するということなので、


おっしゃっているやり方では、次のようになると思います。

OpenFileDialog dlg = new OpenFileDialog();
DialogResult res = dlg.ShowDialog();
//選択されなかったらなにもしない
if (res != DialogResult.OK)
{
  return;
}

//拡張子判断(using System.IOを追加)
if (Path.GetExtension(dlg.FileName).ToLower() == ".csv")
{
  label1.Text = dlg.FileName;
}
else
{
  MessageBox.Show("CSVを選択してください");
}


ただし、そもそもCSVファイル以外は読み込ませたくないのであれば、
FileOpenDialogでフィルタをかけてしまい、
CSVファイルのみ表示するようにすれば、
目的は達成されると思うのですが、

//ダイアログを設定
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "CSVファイル|*.csv"; //CSVだけ表示
DialogResult res = dlg.ShowDialog(); //ダイアログを表示
//選択されなかったらなにもしない
if (res != DialogResult.OK)
{
  return;
}
label1.Text = dlg.FileName; //ファイル名を表示

インデントをつけるために、スペースは全角になっています。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!