如果没有输入,只询问文件名

时间:2017-08-17 16:39:06

标签: c# winforms c#-4.0 savefiledialog

我正在使用C#和winform,并在按钮点击事件中将数据保存到.xlsx。我有一个独特的情况,我不知道如何编码.... 如果仍然显示表单并且用户单击该按钮,我希望它提示输入文件名并保存位置。 如果表单尚未关闭且用户第二次点击该按钮,我希望将.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"; }
    }
}

2 个答案:

答案 0 :(得分:3)

因此,数据是否具有设置文件名是该类状态的一部分。在你有btnOne_Click的类中,只需用文件名定义一个字符串,默认为null:

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对话框,则中止保存并且不更改文件名状态。

答案 1 :(得分: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();
        }
    }
}