走近vb.net(七)在窗體上畫圖
如果看過一些文章一定知道在窗體上畫圖要使用system.drawing類,在vb.net中沒有line與label控件,需要自已寫一些代碼,
首先寫一個事件過程onpaint.在顯示窗體的同時顯示圖形
protected overrides sub onpaint(byval e as painteventargs)
'todo: 請在此處添加繪圖代碼
end sub
byval e as painteventargs是一個參數類,這個有些象在vb6在使用的自定義類型,在一個集合中有多個成員變量,(參考
《vb.net核心定義》之集合/成員)。在e后面打點就可以看到相關的參數。在mouse_down,mouse_up等事件中獲取x,y坐標就使用
e.x跟e.y。在窗體上有些事件需要手工添加,前面幾章有相關內容,現在我們要使用的是e.graphics參數,
請添加如下代碼:
dim gp as graphics = e.graphics
當然你要記住在程序代碼的起始加了imports system.drawing 這樣system.drawing.graphics 可以寫成graphics,而system.drawing.pen
可以寫成pen
另外我們要創建一個畫筆對象,這就象現實中一樣,畫筆是一個對象,我們使用畫筆去繪圖。
dim newpen as new pen(color.black,5)
甚至可以這樣寫:
dim newpen as new pen(color.fromargb(22, 23, 24), 5)
pen是一個重載性質的函數,也就是有好幾種格式,在打逗號以后出現的提示上可以看到一個向下的鍵頭與數字,點擊箭頭可以
察看函數的不同版本使用的不同參數。這里使用了一個system.draw.color類的fromargb的函數,由于他也是一個重載的孫數,你可以寫入
a,r,g,b四個參數,也可以寫入r,g,b三個參數,一共有四種版本供您使用,也只要在打逗號以后出現的提示上可以看到一個向下的鍵頭與數字即可。
你可以只使用一個色彩的參數,或者在后面加一個整數,定義畫筆的大小,也就是畫出來的線條應該有多寬,記住color也是system.drawing
的一個類如:dim newpen as new pen(color.black)
現在使用drawline方法畫出想要的線條,如下:
gp.drawline(newpen, 10, 20, 70, 80)
drawline也是一個重載的方法(overloads public sub drawline)一般是使用5個參數,后面四個可以是integer類型,也可以是single的
浮點類型。這里使用的是整數
第一個是代表畫筆,后面依次是x1,y1(起點坐標),x2,y2(終點坐標)
畫一個矩形如下:
protected overrides sub onpaint(byval e as painteventargs)
dim gp as graphics = e.graphics
dim newpen as new pen(color.black, 5)
gp.drawrectangle(newpen, 10, 20, 70, 80)
end sub
畫正方形要求最后兩個參數相同:
protected overrides sub onpaint(byval e as painteventargs)
dim gp as graphics = e.graphics
dim newpen as new pen(color.black, 5)
gp.drawrectangle(newpen, 10, 20, 80, 80)
end sub
畫一拋物線如下:
protected overrides sub onpaint(byval e as painteventargs)
dim gp as graphics = e.graphics
dim newpen as new pen(color.black, 5)
gp.drawarc(newpen, 10, 20, 70, 80, 123, 233)
end sub
畫貝塞爾曲線如下:
protected overrides sub onpaint(byval e as painteventargs)
dim gp as graphics = e.graphics
dim newpen as new pen(color.black, 5)
gp.drawbezier(newpen, 10, 20, 70, 80, 123, 233, 23, 45)
end sub
你也可以在一屏之內同時進行多次繪圖,如下:
protected overrides sub onpaint(byval e as painteventargs)
dim i as integer
dim gp as graphics = e.graphics
for i = 1 to 10
dim newpen as new pen(color.fromargb(i * 25, i * 25, i * 25), 5)
gp.drawrectangle(newpen, 10 + i * 6, 20 + i * 6, 80, 80)
next
end sub
運行一下,這個圖片一定讓你捧腹一笑,你可以隨意改變參數看看有什么效果。