Dave the Golfer Ответов: 1

Как использовать общедоступную подпроцедуру, использующую имя формы в качестве переменной


У меня есть большое количество бланков, которые нужно распечатать. Я добавил кнопку к каждой форме, которая может вызвать печать формы (в формате PDF). Вместо того чтобы повторять код для каждой формы, я хочу создать общую процедуру, которая может быть вызвана при выборе кнопки. Мой код ниже создает ошибки!

Любая помощь будет принята с благодарностью.

Что я уже пробовал:

В моей заявке есть несколько бланков, которые я хочу распечатать. Поэтому на каждой форме у меня есть кнопка для создания печати.
Код кнопки выглядит следующим образом;
Private Sub PDFTeamBut_Click(sender As Object, e As EventArgs) Handles PDFTeamBut.Click
        PDFTeamBut.Visible = False
        PrtTSBut.Visible = False
        Array.ForEach(Me.Controls.OfType(Of TextBox).ToArray, Sub(tb As TextBox) tb.DeselectAll())
        PrintForm1.PrinterSettings.PrinterName = "Microsoft Print to PDF"
        PrintForm1.PrintAction = Printing.PrintAction.PrintToPrinter
        If PrintForm1.PrinterSettings.IsValid Then

            PrintForm1.PrinterSettings.DefaultPageSettings.PaperSize = New System.Drawing.Printing.PaperSize("PaperA4", 830, 1170)
            PrintForm1.PrinterSettings.DefaultPageSettings.Landscape = False
            PrintForm1.PrinterSettings.DefaultPageSettings.Margins = New System.Drawing.Printing.Margins(3.2, 3.2, 1.5, 14.5)
            PrintForm1.Print(Me, PowerPacks.Printing.PrintForm.PrintOption.Scrollable)
        Else
            MessageBox.Show("Microsoft Print to PDF printer not set up!")
        End If
        PDFTeamBut.Visible = True
        PrtTSBut.Visible = True
        Me.Hide()'Hides form to be printed
        FormName.InputForm.Show()'Returns to input form
    End Sub


Я хочу заменить код вызовом публичной подпроцедуры, например
Private Sub PDFTeamBut_Click(sender As Object, e As EventArgs) Handles PDFTeamBut.Click
        CreatePDF(NameOfForm)
    End Sub



С процедурой публичных суб ;
Public Class PDFPrint
Public Sub CreatePDF(ByVal FormName As Form)
        'Creates a PDF file of the named form
        FormName.PDFTeamBut.Visible = False
        FormName.PrtTSBut.Visible = False
        Array.ForEach(FormName.Controls.OfType(Of TextBox).ToArray, Sub(tb As TextBox) tb.DeselectAll())
        FormName.PrintForm1.PrinterSettings.PrinterName = "Microsoft Print to PDF"
        FormName.PrintForm1.PrintAction = Printing.PrintAction.PrintToPrinter
        If FormName.PrintForm1.PrinterSettings.IsValid Then

            FormName.PrintForm1.PrinterSettings.DefaultPageSettings.PaperSize = New System.Drawing.Printing.PaperSize("PaperA4", 830, 1170)
            FormName.PrintForm1.PrinterSettings.DefaultPageSettings.Landscape = False
            FormName.PrintForm1.PrinterSettings.DefaultPageSettings.Margins = New System.Drawing.Printing.Margins(3.2, 3.2, 1.5, 14.5)
            FormName.PrintForm1.Print(Me, PowerPacks.Printing.PrintForm.PrintOption.Scrollable)
        Else
            MessageBox.Show("Microsoft Print to PDF printer not set up!")
        End If
        FormName.PDFTeamBut.Visible = True
        FormName.PrtTSBut.Visible = True
        FormName.Hide()'Hides form to be printed
        InputForm.Show()'Returns to input form
    End Sub
End Class 

Но я получаю следующие ошибки кодирования, такие как;

Error	BC30456	'PDFTeamBut' is not a member of 'Form'.	

и
Error	BC30456	'PrintForm1' is not a member of 'Form'.	

[no name]

Похоже на работу по наследству.

Dave the Golfer

Не понимаю!

1 Ответов

Рейтинг:
6

Dave the Golfer

С тех пор как я опубликовал эту проблему, я нашел в интернете некоторую информацию, которая заставила меня изменить следующие строки

FormName.PDFTeamBut.Visible = False
FormName.PrtTSBut.Visible = False

и
FormName.PDFTeamBut.Visible = True
FormName.PrtTSBut.Visible = True

к
FormName.Controls("PDFTeamBut").Visible = False
FormName.Controls("PrtTSBut").Visible = False

и
FormName.Controls("PDFTeamBut").Visible = True
FormName.Controls("PrtTSBut").Visible = True


Это исправило первую ошибку.
Все еще есть проблема с ошибкой PrintForm1.