none
Вызов PictureBox1_Paint из дочерней формы. RRS feed

  • Вопрос

  • Здравствуйте! Помогие, пожалуйста, советом. У мея есть форма Form1 и Button1, расположенная на этой форме, PictureBox1 тоже нахоится на этой форме. По щелчку на кнопке Button1, появляется Form2. На Form2 размещены текстовые поля и кнопка Button2. После ввода в текстовеые поля значений и щелчка по кнопке, в PictureBox1 должен появиться отрезок прямой.  Отрезок прямой появляется в нужном месте только когда родительская форма прикрыта дочерней. Если дочерняя форма с заполнеными текстовыми полями в стороне, то в PictureBox1 ничего не происходиит. Если перетащить Form2, с введёнными значениями начала и конца отрезка, над PictureBox1, тогда отрезок появляется. Как сделать, чтобы дочерняя форма была в любом месте экрана, а отрезок рисовался в нужном месте?
    Если при отладке щёлкнуть по кнопке Button1 на Form2, то появляется ошибка: "Ссылка на объект не указывает на экземпляр объекта." Это строка Dim line As Graphics = pe.Graphics. Какие параметры нужно передать при вызове процедуре PictureBox1_Paint в Form2? И можно ли вызывать эту процедуру из другой формы?  Отрывок кода:
      

    Public Class Form1

        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            PictureBox1.Location = New Point(33, 25)
            PictureBox1.BorderStyle = BorderStyle.FixedSingle
            PictureBox1.Size = New Size(200, 200)
            PictureBox1.BackColor = Color.White

        End Sub   

        Sub PictureBox1_Paint(sender As Object, pe As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
            On Error Resume Next
            Dim begin As Point
            Dim ending As Point
            Dim X1 As Integer = Form2.TextBox1.Text
            Dim Y1 As Integer = Form2.TextBox2.Text
            Dim X2 As Integer = Form2.TextBox3.Text
            Dim Y2 As Integer = Form2.TextBox4.Text
            Dim line As Graphics = pe.Graphics
            begin = New Point(X1, Y1)
            ending = New Point(X2, Y2)
            line.DrawLine(Pens.Black, begin, ending)
        End Sub

        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Form2.Show()
        End Sub

    End Class

    Public Class Form2

        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim pe As PaintEventArgs
            Dim line As Graphics = pe.Graphics
            Call Form1.PictureBox1_Paint(Form1.PictureBox1, pe)
        End Sub
    End Class

                              
    6 марта 2012 г. 19:25

Ответы

  • Здравствуйте.

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


    Для связи [mail]

    • Помечено в качестве ответа Abolmasov Dmitry 12 марта 2012 г. 11:40
    7 марта 2012 г. 5:51

Все ответы