none
在VB2005的PictureBox內,如何於FormLoad或FormPaint事件中畫出圖形來? RRS feed

  • 問題

  • 各位先進大大 您好!  

    小弟在下我有個不解的問題 , 在VB6 中, 只要在FormLoadFormPaint 事件裡 , 對 PictureBox進行畫圖 , 都可以順利畫出圖來 . 可是同樣的說...在VB2005 或 VB2008 都不能畫出圖來? 這是在攪什嘛鬼呀? 

    請看我寫的簡單例子, 請大大來抓包,感恩不盡!!

        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
         Dim i, Pw, Ph As Integer

            Dim g As Graphics
            g = PictureBox1.CreateGraphics

            Dim mPen As Pen
            mPen = Pens.ForestGreen

            Pw = PictureBox1.Width
            Ph = PictureBox1.Height / 2

            For i = 0 To Pw Step 10
                g.DrawLine(mPen, 0, Ph, i, 0)
                g.DrawLine(mPen, 0, Ph, i, Pw)
                g.DrawLine(mPen, Pw, Ph, Pw - i, Pw)
                g.DrawLine(mPen, Pw, Ph, Pw - i, 0)
            Next i
        End Sub

    表單中只有一個PictureBox1,即使用Form1_Paint( )也一樣畫不出東西來 , 但把程式放入 Button1_Click( ) 中就沒問題,圖就可畫出來 , 這倒底是怎麼回事啊?

    懇請賜解!!  謝謝!!
    2008年9月9日 上午 11:35

解答

  • :::

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim b As New Bitmap(PictureBox1.Width, PictureBox1.Height)
            Dim g As Graphics

            g = System.Drawing.Graphics.FromImage(b)

            Dim i, Pw, Ph As Integer

            Dim mPen As Pen
            mPen = Pens.ForestGreen

            Pw = PictureBox1.Width
            Ph = PictureBox1.Height / 2

            For i = 0 To Pw Step 10
                g.DrawLine(mPen, 0, Ph, i, 0)
                g.DrawLine(mPen, 0, Ph, i, Pw)
                g.DrawLine(mPen, Pw, Ph, Pw - i, Pw)
                g.DrawLine(mPen, Pw, Ph, Pw - i, 0)
            Next i

            PictureBox1.Image = b
        End Sub

     

    2008年9月9日 下午 01:55
  • 要用 Paint 事件的話,就要用該物件的 Paint ,而非放在上層,因為 Form1_Paint 事件並不會跟 PictureBox1_Paint 事件同時觸發。

     

    先看看觀念,前面的討論已有:

    回覆:關於繪圖 

    回覆:請問:圖案縮小問題…直接在form上面,用graphic畫出來,非jpg等圖檔改。

     

    2008年9月9日 下午 03:02

所有回覆

  • :::

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim b As New Bitmap(PictureBox1.Width, PictureBox1.Height)
            Dim g As Graphics

            g = System.Drawing.Graphics.FromImage(b)

            Dim i, Pw, Ph As Integer

            Dim mPen As Pen
            mPen = Pens.ForestGreen

            Pw = PictureBox1.Width
            Ph = PictureBox1.Height / 2

            For i = 0 To Pw Step 10
                g.DrawLine(mPen, 0, Ph, i, 0)
                g.DrawLine(mPen, 0, Ph, i, Pw)
                g.DrawLine(mPen, Pw, Ph, Pw - i, Pw)
                g.DrawLine(mPen, Pw, Ph, Pw - i, 0)
            Next i

            PictureBox1.Image = b
        End Sub

     

    2008年9月9日 下午 01:55
  • 要用 Paint 事件的話,就要用該物件的 Paint ,而非放在上層,因為 Form1_Paint 事件並不會跟 PictureBox1_Paint 事件同時觸發。

     

    先看看觀念,前面的討論已有:

    回覆:關於繪圖 

    回覆:請問:圖案縮小問題…直接在form上面,用graphic畫出來,非jpg等圖檔改。

     

    2008年9月9日 下午 03:02