如何允许用户使用对话框 C# 选择保存位置而不是文件名
How to allow user choose save location but not filename with dialog box C#
我制作了一个税务计算器(所有的理论都是为了实践),它有一个功能,用户可以按一个按钮来导出基本的 PDF 税务报告。根据是雇员还是承包商,对税务报告的要求略有不同。承包商的 EmployeeID 以 "C" 开头。 目前一切顺利。
现在我只要求承包商 承包商 PDF 以特定名称 "ContractorTax" 保存。 有没有一种方法可以让用户 select 在锁定文件名(我猜是文件扩展名)的情况下只允许一个位置的安全文件对话框。
这是我目前拥有的相关代码:
//Creates PDF.
private void CreatePdf()
{
//sets default options for save file
saveFileDialog1.FileName = "Tax Report for " + txtFirstName.Text + " " + txtSurname.Text;
saveFileDialog1.Filter = "PDF files (*.pdf)|*.pdf|All files (*.*)|*.*";
saveFileDialog1.DefaultExt = "pdf";
saveFileDialog1.ShowDialog();
/*- create FileStream object (fs) with pdf name, mode type, access type, and if it can be shared
- create new document object (A4 page size)
- create a iTextSharp.text.pdf.PdfWriter object, it helps to write the Document to the Specified
FileStream
- open document
- add paragraph
- close document*/
if (txtEmployeeID.Text.ToUpper().StartsWith("C"))
{
FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.Create, FileAccess.Write, FileShare.None);
Document doc = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(doc, fs);
doc.Open();
doc.Add(new Paragraph("TAX REPORT" + nl + nl + "Employee ID: " + txtEmployeeID.Text.ToUpper() + nl + "Name: " + txtFirstName.Text + " " + txtSurname.Text + nl + "Mobile Number: " + txtMobileNumber.Text + nl +
"Email: " + txtEmail.Text + nl + "Department: " + comboBoxDepartment.Text + nl + "Salary: $" + salary.ToString() + nl + "Tax Payable: $" + taxPayable.ToString()));
doc.Close();
}
else
{
FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.Create, FileAccess.Write, FileShare.None);
Document doc = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(doc, fs);
doc.Open();
doc.Add(new Paragraph("TAX REPORT" + nl + nl + "Employee ID: " + txtEmployeeID.Text.ToUpper() + nl + "Name: " + txtFirstName.Text + " " + txtSurname.Text + nl + "Mobile Number: " + txtMobileNumber.Text + nl +
"Department: " + comboBoxDepartment.Text + nl + "Salary: $" + salary.ToString() + nl + "Tax Payable: $" + taxPayable.ToString()));
doc.Close();
}
}
我发现之前有人问过这个问题,但答案仅与 Java 相关,我使用的是 visual studio 2017 并使用 C# 进行编码。
对于您的问题,您希望雇主的税收收据名称是指定的且不能更改。
您可以尝试通过以下代码获取。
private void CreatePdf()
{
string path1 = "ContractorTax.pdf";
if (txtEmployeeID.Text.ToUpper().StartsWith("C"))
{
FolderBrowserDialog dialog = new FolderBrowserDialog();
dialog.ShowDialog();
string path2 = Path.Combine(dialog.SelectedPath, path1);
FileStream fs = new FileStream(path2, FileMode.Create, FileAccess.Write, FileShare.None);
Document doc = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(doc, fs);
doc.Open();
doc.Add(new Paragraph("TAX REPORT" + nl + nl + "Employee ID: " + txtEmployeeID.Text.ToUpper() + nl + "Name: " + txtFirstName.Text + " " + txtSurname.Text + nl + "Mobile Number: " + txtMobileNumber.Text + nl +
"Email: " + txtEmail.Text + nl + "Department: " + comboBoxDepartment.Text + nl + "Salary: $" + salary.ToString() + nl + "Tax Payable: $" + taxPayable.ToString()));
doc.Close();
MessageBox.Show("success");
}
else
{
saveFileDialog1.FileName = "Tax Report for " + txtFirstName.Text + " " + txtSurname.Text;
saveFileDialog1.Filter = "PDF files (*.pdf)|*.pdf|All files (*.*)|*.*";
saveFileDialog1.DefaultExt = "pdf";
saveFileDialog1.ShowDialog();
FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.Create, FileAccess.Write, FileShare.None);
Document doc = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(doc, fs);
doc.Open();
doc.Add(new Paragraph("TAX REPORT" + nl + nl + "Employee ID: " + txtEmployeeID.Text.ToUpper() + nl + "Name: " + txtFirstName.Text + " " + txtSurname.Text + nl + "Mobile Number: " + txtMobileNumber.Text + nl +
"Department: " + comboBoxDepartment.Text + nl + "Salary: $" + salary.ToString() + nl + "Tax Payable: $" + taxPayable.ToString()));
doc.Close();
}
}
希望对您有所帮助。
让我们简单点。
通常您希望用户 select 文件夹,而不是文件位置。
所以你应该使用 FolderBrowserDialog
而不是 OpenFileDialog
。
得到文件夹后,用Path.Combine
把文件名和文件夹名组合成一个完整的路径
我制作了一个税务计算器(所有的理论都是为了实践),它有一个功能,用户可以按一个按钮来导出基本的 PDF 税务报告。根据是雇员还是承包商,对税务报告的要求略有不同。承包商的 EmployeeID 以 "C" 开头。 目前一切顺利。
现在我只要求承包商 承包商 PDF 以特定名称 "ContractorTax" 保存。 有没有一种方法可以让用户 select 在锁定文件名(我猜是文件扩展名)的情况下只允许一个位置的安全文件对话框。
这是我目前拥有的相关代码:
//Creates PDF.
private void CreatePdf()
{
//sets default options for save file
saveFileDialog1.FileName = "Tax Report for " + txtFirstName.Text + " " + txtSurname.Text;
saveFileDialog1.Filter = "PDF files (*.pdf)|*.pdf|All files (*.*)|*.*";
saveFileDialog1.DefaultExt = "pdf";
saveFileDialog1.ShowDialog();
/*- create FileStream object (fs) with pdf name, mode type, access type, and if it can be shared
- create new document object (A4 page size)
- create a iTextSharp.text.pdf.PdfWriter object, it helps to write the Document to the Specified
FileStream
- open document
- add paragraph
- close document*/
if (txtEmployeeID.Text.ToUpper().StartsWith("C"))
{
FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.Create, FileAccess.Write, FileShare.None);
Document doc = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(doc, fs);
doc.Open();
doc.Add(new Paragraph("TAX REPORT" + nl + nl + "Employee ID: " + txtEmployeeID.Text.ToUpper() + nl + "Name: " + txtFirstName.Text + " " + txtSurname.Text + nl + "Mobile Number: " + txtMobileNumber.Text + nl +
"Email: " + txtEmail.Text + nl + "Department: " + comboBoxDepartment.Text + nl + "Salary: $" + salary.ToString() + nl + "Tax Payable: $" + taxPayable.ToString()));
doc.Close();
}
else
{
FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.Create, FileAccess.Write, FileShare.None);
Document doc = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(doc, fs);
doc.Open();
doc.Add(new Paragraph("TAX REPORT" + nl + nl + "Employee ID: " + txtEmployeeID.Text.ToUpper() + nl + "Name: " + txtFirstName.Text + " " + txtSurname.Text + nl + "Mobile Number: " + txtMobileNumber.Text + nl +
"Department: " + comboBoxDepartment.Text + nl + "Salary: $" + salary.ToString() + nl + "Tax Payable: $" + taxPayable.ToString()));
doc.Close();
}
}
我发现之前有人问过这个问题,但答案仅与 Java 相关,我使用的是 visual studio 2017 并使用 C# 进行编码。
对于您的问题,您希望雇主的税收收据名称是指定的且不能更改。
您可以尝试通过以下代码获取。
private void CreatePdf()
{
string path1 = "ContractorTax.pdf";
if (txtEmployeeID.Text.ToUpper().StartsWith("C"))
{
FolderBrowserDialog dialog = new FolderBrowserDialog();
dialog.ShowDialog();
string path2 = Path.Combine(dialog.SelectedPath, path1);
FileStream fs = new FileStream(path2, FileMode.Create, FileAccess.Write, FileShare.None);
Document doc = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(doc, fs);
doc.Open();
doc.Add(new Paragraph("TAX REPORT" + nl + nl + "Employee ID: " + txtEmployeeID.Text.ToUpper() + nl + "Name: " + txtFirstName.Text + " " + txtSurname.Text + nl + "Mobile Number: " + txtMobileNumber.Text + nl +
"Email: " + txtEmail.Text + nl + "Department: " + comboBoxDepartment.Text + nl + "Salary: $" + salary.ToString() + nl + "Tax Payable: $" + taxPayable.ToString()));
doc.Close();
MessageBox.Show("success");
}
else
{
saveFileDialog1.FileName = "Tax Report for " + txtFirstName.Text + " " + txtSurname.Text;
saveFileDialog1.Filter = "PDF files (*.pdf)|*.pdf|All files (*.*)|*.*";
saveFileDialog1.DefaultExt = "pdf";
saveFileDialog1.ShowDialog();
FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.Create, FileAccess.Write, FileShare.None);
Document doc = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(doc, fs);
doc.Open();
doc.Add(new Paragraph("TAX REPORT" + nl + nl + "Employee ID: " + txtEmployeeID.Text.ToUpper() + nl + "Name: " + txtFirstName.Text + " " + txtSurname.Text + nl + "Mobile Number: " + txtMobileNumber.Text + nl +
"Department: " + comboBoxDepartment.Text + nl + "Salary: $" + salary.ToString() + nl + "Tax Payable: $" + taxPayable.ToString()));
doc.Close();
}
}
希望对您有所帮助。
让我们简单点。
通常您希望用户 select 文件夹,而不是文件位置。
所以你应该使用 FolderBrowserDialog
而不是 OpenFileDialog
。
得到文件夹后,用Path.Combine
把文件名和文件夹名组合成一个完整的路径