投稿者 るきお  (社会人) 投稿日時 2021/10/11 20:34:43
ちょっと、ろんじさんのやろうとしていることとは違いますが、私のお勧めは、モジュールではなくクラスを使った次のようなプログラムです。

フォーム上のコントロールのイベントはフォームでハンドルするのがシンプルでわかりやすいので、このプログラムでは、イベント自体はフォームに記述して、イベントの中身はクラスに記述しています。
魔界の仮面弁士さんの案1とほぼ同じです。

フォーム側
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        PrintDocument1.Print()
    End Sub

    Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
        Dim report As New MyReport
        report.Draw(e.Graphics)
    End Sub

End Class


クラス側
Public Class MyReport

    Public Sub Draw(g As Graphics)
        Dim rect As New Rectangle(20, 10, 200, 150)
        Dim gradientBrush As New Drawing2D.LinearGradientBrush(rect, Color.Blue, Color.Red, 0)
        g.FillRectangle(gradientBrush, 20, 10, 200, 150)
    End Sub

End Class


どうしてもモジュールでイベントをハンドルしたければ、次のような方法もあります。
(が、上の案の方がお勧めです。)

フォーム側
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        PrintDocument1.Print()
    End Sub

    Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
        ReportModule.ReportDocument = Me.PrintDocument1
    End Sub

End Class


モジュール側
Imports System.Drawing.Printing

Public Module ReportModule

    Public WithEvents ReportDocument As PrintDocument

    Private Sub ReportDocument_PrintPage(sender As Object, e As PrintPageEventArgs) Handles ReportDocument.PrintPage
        Dim rect As New Rectangle(20, 10, 200, 150)
        Dim gradientBrush As New Drawing2D.LinearGradientBrush(rect, Color.Blue, Color.Red, 0)
        e.Graphics.FillRectangle(gradientBrush, 20, 10, 200, 150)
    End Sub
End Module