Как разрешить пользователю выбирать место для сохранения, но не имя файла в диалоговом окне C# - PullRequest
0 голосов
/ 07 мая 2020

Я сделал налоговый калькулятор (теоретический для практики), и в нем есть функция, с помощью которой пользователь может нажать кнопку, чтобы экспортировать базовый c налоговый отчет в формате PDF. Требования к налоговому отчету немного отличаются в зависимости от того, является он сотрудником или подрядчиком. Подрядчики обозначаются идентификатором EmployeeID, начинающимся с «C». Пока все хорошо .

Теперь у меня есть требование только для подрядчиков, чтобы PDF-файл подрядчика сохранялся с определенным c именем «ContractorTax» . Есть ли способ создать диалоговое окно с безопасным файлом, которое позволяет пользователям выбирать местоположение только при заблокированном имени файла (и, я думаю, расширении файла).

Это соответствующий код, который у меня есть пока:

   //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#.

Ответы [ 2 ]

1 голос
/ 11 мая 2020

Давайте сделаем это проще.
Обычно вы хотите, чтобы пользователь выбирал папку, а не местоположение файла.
Таким образом, вы должны использовать FolderBrowserDialog вместо OpenFileDialog. Когда вы получите папку, используйте Path.Combine, чтобы объединить имя файла и имя папки в полный путь.

1 голос
/ 11 мая 2020

По вашему вопросу: вы хотите, чтобы имя налоговой квитанции работодателя было указано и не могло быть изменено.

Вы можете попробовать следующий код, чтобы получить его.

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();
        }



    }

Надеюсь это может вам помочь.

...