畫好的圖怎麼刪掉阿~~VB

之前是用Me.controls.add(mypicturebox)的方式

但現在想改成直接畫上去

Public Class Form1

Dim XX As Integer = 65

Dim YY As Integer = 220

Dim g As Graphics

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

g = Me.CreateGraphics

Dim s1 As New Rectangle(XX, YY, 50, 10)

g.FillRectangle(Brushes.Red, s1)

YY -= 11

End Sub

End Class

我還有個button... 是要刪格子的...怎麼刪畫出來的東西阿

不是用Dispose的方式嗎...

我打g.Dispose( )再另一個Button怎麼不行用

Update:

大大~你所說的

再來你問到"刪畫出來的東西"。有兩個辦法:

請問第一個方法怎麼用...

解釋我看的懂...貼上個動作的圖回去....

但是我把這一段貼在另一個button上

沒動作阿

Dim g As Graphics = Me.CreateGraphics

g.DrawImage(save_image , 0, 0)

Update 2:

不對阿

Dim g As Graphics = Me.CreateGraphics

g.DrawImage(save_image , 0, 0)

這一段應該是現在這個動作不是嗎

因為paint是用這一段阿...所以他應該也是現在畫好的圖不是嗎

有點搞混了耶~~

Update 3:

老大~這類的書可以介紹嗎

老實說我還是很不懂

流程我是懂

但像你這我就不懂....這是要加在哪阿

方法1要改成

form_image.Dispose()

form_image = save_image.Clone

g.DrawImage(form_image, 0, 0)

這樣你的paint裡面也是

g.DrawImage(form_image , 0, 0)

就不會出錯了

1 Answer

Rating
  • litfal
    Lv 5
    1 decade ago
    Favorite Answer

    你繪圖的觀念不對

    g.Dispose 只是把畫筆刪了, 沒辦法還原畫布

    通常這種問題會用bitmap (可以想像成畫布

    而且,畫上去的圖案只能再畫其他的圖案上去蓋過,並不能擦掉還原。

    '宣告在Class層級

    Dim form_image As New Bitmap(400, 300)

    Dim save_image As Bitmap

    Dim back_image As New Bitmap(400, 300)

    '400,300是畫布的大小,自訂

    用相同的觀念在畫布上畫畫

    save_image = form_image.Clone '(紀錄被改動前的畫布

    Dim s1 As New Rectangle(65, 220, 50, 10)

    Dim b_g As Graphics = Graphics.FromImage(back_image)

    b_g.FillRectangle(Brushes.Red, s1)

    '畫好的圖案再轉畫到form_image上

    b_g = Graphics.FromImage(form_image)

    b_g.DrawImage(back_image, 0, 0)

    '最後才將form_image畫到Form(Me)上

    Dim g As Graphics = Me.CreateGraphics

    g.DrawImage(form_image, 0, 0)

    再來你問到"刪畫出來的東西"。有兩個辦法:

    注意到剛剛有一行

    save_image = form_image.Clone '(紀錄被改動前的畫布

    還沒畫前的畫布被我們拷貝一份了,把這張貼回去不就相當於把前面畫的刪除了嗎?

    Dim g As Graphics = Me.CreateGraphics

    g.DrawImage(save_image , 0, 0)

    '(這方法比較單純但花記憶體,你可以自己思考"改動區域"="紀錄區域"的寫法)

    另一個方法是把底色畫回去,假設你的底色是白色

    Dim s1 As New Rectangle(65, 220, 50, 10)

    Dim b_g As Graphics = Graphics.FromImage(back_image)

    b_g.FillRectangle(Brushes.White, s1)

    :'以下同繪圖方法

    PS.我在很多地方省略了Dispose,實作時記得要自己加上,以免記憶體被吃掉...

    這種先繪到Bitmap後才顯示到Form上的繪圖方法是多層繪圖的基礎,需一記!

    2008-11-07 13:40:22 補充:

    如果要配合paint event當然要有所改變

    (PS.這題你並沒有問到paint)

    方法1要改成

    form_image.Dispose()

    form_image = save_image.Clone

    g.DrawImage(form_image, 0, 0)

    這樣你的paint裡面也是

    g.DrawImage(form_image , 0, 0)

    就不會出錯了

    按鈕1 = 紀錄 ->畫圖 ->顯示

    按鈕2 = 讀取 ->顯示

    這樣流程明白嗎?

    2008-11-07 15:34:13 補充:

    按鈕1,畫新圖的功能

    save_image = form_image.Clone '紀錄

    ':畫圖過程省略

    g.DrawImage(form_image, 0, 0) '<-顯示

    按鈕2,讀取上一張圖的功能

    form_image.Dispose()

    form_image = save_image.Clone '<-讀取

    g.DrawImage(form_image, 0, 0) '<-顯示

    paint event 只需要顯示

    g.DrawImage(form_image, 0, 0) '<-顯示

    我只有看過VB6的書,.Net之後是網路自學沒買書...

    MSDN那麼大本書都看不完了

    Source(s): 佛心來著...
Still have questions? Get your answers by asking now.