2017-08-17 7 views
0

私はC#とwinformを使用しており、ボタンクリックイベントでデータを.xlsxに保存しています。私は、コード化する方法がわからないという独自の状況があります。 フォームがまだ表示されていて、ユーザーがボタンをクリックすると、ファイル名を入力して場所を保存するようにします。 BUTフォームが閉じられておらず、ユーザーがもう一度ボタンをクリックした場合は、.xlsxを同じ場所に同じファイル名で保存し、プロンプトなしで書き込みを行います。ファイル名が入力されていない場合にのみ尋ねる

これは名前と場所の保存を求めるプロンプトに使用する構文ですが、ファイル名/保存場所が既に入力されているかどうかを確認する方法と、再度プロンプトが表示されない場合はどうすればいいですか?

private void btnOne_Click(object sender, EventArgs e) 
{ 
    SaveFileDialog save = new SaveFileDialog(); 
    save.InitialDirectory = @"C:\"; 
    save.RestoreDirectory = true; 
    save.Title = "Select save location file name"; 
    save.DefaultExt = "xlsx"; 

    if (save.ShowDialog() == DialogResult.OK) 
    { 
     try 
     { 
      var file = new FileInfo(save.FileName); 
      using (var package = new ExcelPackage(file)) 
      { 
       package.Save(); 
      } 
     } 
     catch { Messagebox.Show("An error has occured"; } 
    } 
} 

答えて

0

これをグローバルに宣言します。そして、

public string Filename; 

このようなあなたのサブルーチンを変更:

だから、
private void btnOne_Click(object sender, EventArgs e) 
{ 
    if (string.IsNullOrWhiteSpace(Filename)) 
    { 
    SaveFileDialog save = new SaveFileDialog(); 
    save.InitialDirectory = @"C:\"; 
    save.RestoreDirectory = true; 
    save.Title = "Select save location file name"; 
    save.DefaultExt = "xlsx"; 

    if (save.ShowDialog() == DialogResult.OK) 
    { 
     try 
     { 
      Filename = save.FileName; 
      var file = new FileInfo(save.FileName); 
      using (var package = new ExcelPackage(file)) 
      { 
       package.Save(); 
      } 
     } 
     catch { MessageBox.Show("An error has occured"); } 
    } 
    } 
    else 
    { 
     var file = new FileInfo(Filename); 
     using (var package = new ExcelPackage(file)) 
     { 
      package.Save(); 
     } 
    } 
} 
+0

は、クラス名の下では全体的に意味しますが、最初のメソッドよりも上ですか? – BellHopByDayAmetuerCoderByNigh

+1

はい、メソッド内にはありませんが、クラス内にあります。 – 0liveradam8

+0

ああ。間違ったメッセージボックスを持つ元のコードをコピーしました。私はそれにも閉じ括弧がないことに気づいた。 – 0liveradam8

3

、データが設定されたファイル名を持っているかどうかは、クラスの状態の一部であります。あなたはbtnOne_Clickを持っているクラスの内部では、ファイル名だけで文字列を定義し、ヌルにデフォルト設定:

string filepath = null; 

次に、あなたのbtnOne_Clickに、あなたはファイルパスをチェックしたいです。それがない場合は、「saveAs」ダイアログを開きます。その後、filepathが設定されている場合は保存してください。

private void btnOne_Click(object sender, EventArgs e) 
{ 
    if (filepath == null) 
    { 
     SaveFileDialog save = new SaveFileDialog(); 
     save.InitialDirectory = @"C:\"; 
     save.RestoreDirectory = true; 
     save.Title = "Select save location file name"; 
     save.DefaultExt = "xlsx"; 

     if (save.ShowDialog() == DialogResult.OK) { 
      filepath = save.FileName; 
     } 
    } 

    if (filepath != null) 
    { 
     try 
     { 
      var file = new FileInfo(filepath); 
      using (var package = new ExcelPackage(file)) 
      { 
       package.Save(); 
      } 
     } 
     catch { MessageBox.Show("An error has occured"; } 
    } 
} 

この論理構造は、ユーザーが保存ボタンを押したときの標準的な動作を提供します。 saveAsダイアログをキャンセルすると、保存が中止され、ファイル名の状態は変更されません。

関連する問題