Вызов метода из другого класса для записи текста в форму.VB.NET - PullRequest
0 голосов
/ 06 декабря 2011

У меня есть две формы Form1 и Form 2. Я передаю функцию с тремя значениями из Form1 и хочу, чтобы событие загрузки form2 вызвало эту функцию. В основном я хочу «нарисовать» значения qseq, midline и hseqв form2

Public Class Form1 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim f2 As New Form2
            Form2.Visible=True
            f2.DrawString(qseq, midline, hseq)
    End Sub
End Class

Form2:

Public Class Form2

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub

    Public Sub DrawString(ByVal qseq As String, ByVal midline As String, ByVal hseq As String)
        Dim formGraphics As System.Drawing.Graphics = Me.CreateGraphics()
        Dim drawString As String = qseq 'and similarly for midline and hseq
        Dim drawFont As New System.Drawing.Font("Arial", 16)
        Dim drawBrush As New  _
            System.Drawing.SolidBrush(System.Drawing.Color.Black)
        Dim x As Single = 200.0
        Dim y As Single = 100.0
        Dim drawFormat As New System.Drawing.StringFormat
        formGraphics.DrawString(drawString, drawFont, drawBrush, _
                                x, y, drawFormat)
        drawFont.Dispose()
        drawBrush.Dispose()
        formGraphics.Dispose()
    End Sub
End Class

Когда я запускаю это, на form2 ничего не печатается, как при запуске события load, твой метод drawstring не вызывается.как я могу вызвать drawstring из метода load, поскольку drawstring принимает аргументы и вызывается из класса Form1.

1 Ответ

2 голосов
/ 06 декабря 2011

Вы должны переписать form2 так, чтобы элементы, которые нужно нарисовать, были переданы в конструктор формы, а затем использованы для фактического рисования в событии Paint формы.

Например:

Public Class Form2

    Private QSeq As String
    Private Midline As String
    Private HSeq As String

    Protected Sub New()

        ' This call is required by the designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.

    End Sub

    Public Sub New(ByVal sQseq As String, ByVal sMidline As String, ByVal sHseq As String)
        Me.New()

        QSeq = sQseq
        Midline = sMidline
        HSeq = sHseq
    End Sub

    Private Sub Form2_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint

        Dim drawString As String = QSeq 'and similarly for midline and hseq
        Dim x As Single = 200.0
        Dim y As Single = 100.0
        Dim drawFormat As New System.Drawing.StringFormat

        Using drawFont As New System.Drawing.Font("Arial", 16)
            Using drawBrush As New System.Drawing.SolidBrush(System.Drawing.Color.Black)
                e.Graphics.DrawString(drawString, drawFont, drawBrush, x, y, drawFormat)
            End Using
        End Using
    End Sub
End Class

Тогда form1 вызовет форму 2, используя новый конструктор.Также обратите внимание, что вы должны сделать вновь созданный экземпляр (f2) видимым, а не экземпляр по умолчанию (Form2), который у вас есть в вашем вопросе.

Например:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim f2 As New Form2("test", "test2", "test3")
    f2.Visible = True
End Sub
...