VC# SaveFileDIalogがフリーズする
Q&A
Closed
特定の条件下で、SaveFileDialogから処理か返ってこずフリーズしてしまいます。
環境
・Windows11 Pro 64bit
・VisualStudio 2022
・C# Windowフォームアプリケーション
・.Net FrameWorks 4
DataGridViewのdgvMonitor の内容をエクセルに出力するため、SaveFileDialogにて
出力するファイルを指定し、そのファイルパスを後段のMessageFrm_EXCELOutput に
渡すだけなのですが、
SaveFileDialogの画面内で既存のエクセルファイルを指定し「保存」をクリックすると、
本来ならば「(ファイル名)は既に存在します。上書きしますか?」のダイアログボックスが
出るはずですが、「ファイル名」欄に表示されたファイル名(例えばtest.xlsx)が
選択された状態になるだけでダイアログボックスは出ず、そのままの画面でフリーズしてしまいます。
ソース内の
・return;
・path = sfd.FileName;
にブレークポイントを設けていますが、sfd.ShowDialog() から処理が返ってきていないので
ブレークポイントにも引っかかりません。
該当するソースコード
private void pnlMonitorExcel_Click(object sender, EventArgs e)
{
DataGridView source = this.dgvMonitor;
if (source != null)
{
string path;
using (SaveFileDialog sfd = new SaveFileDialog())
{
sfd.Filter = "Excel File (*.xlsx)|*xlsx";
sfd.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.Personal);
sfd.FilterIndex = 0;
sfd.Title = global.LangMgr.GetString("MSGTITLE_SETOUTPUTFILENAME");
sfd.RestoreDirectory = true;
if (sfd.ShowDialog() != DialogResult.OK)
{
return;
}
path = sfd.FileName;
}
object[] obja = { "", "" };
obja[0] = this.lblSelId.Text;
obja[1] = this.lblSelIndex1.Text;
using (MessageFrm_EXCELOutput eo = new MessageFrm_EXCELOutput("MSGTITLE_EXCELOUTPUT", "", path, source, MessageFrm_EXCELOutput.SoueceType.LNMONITOR,obja))
{
eo.ShowDialog();
}
}
}
おかしなことに、保存するソースとなるDataGridViewにデータソースとして設定している
データテーブルの行数が0行の時、この問題は発生しません。
また既存ファイルを指定せず、新規にファイル名を入力した場合も、フリーズは発生しません。
ファイルは特定のファイルではなく、どのエクセルファイルを選択しても同様です。
PC内の全ファイルを試したわけではありませんが、
using (SaveFileDialog sfd = new SaveFileDialog()){
・・・
}
の部分が一字一句同じ関数が他のフォームでも複数個所存在していて、
そちらの処理から問題が発生するファイルを指定し「保存」した場合は、何も問題は発生しません。
そもそもSaveFileDialog自体には、特にDataGridViewの何かを絡めてはいないので、
データ行数で挙動に違いがあるのもよくわからないです。
何か解決の糸口になるような情報はないでしょうか?