走近vb.net(三) 源碼詳解—運(yùn)用顏色的初步探討
新建一個(gè)工程,加入以下控件
1. label控件:label1,label2,labred ,labblue,labgreen
2. picturebox控件:picturebox1
3. button控件:button1
設(shè)置form1的opacity屬性為80%,設(shè)置透明的窗體
在office中抓取一幅取色圖片存為bmp格式,并設(shè)為picturebox1的backgroundimage,即背景圖片
option strict off '關(guān)閉 strict off
imports system.componentmodel '引用族名
imports system.drawing '引用族名
imports system.winforms '引用族名
'下面的例程我將寫出全部的族名與子類,是避免大家看得不明白,如果明白了意思,就可以使用基于省略的方式
public class form1
inherits system.winforms.form '從system.winforms.form類引用到form1
public pixx, pixy as integer '聲明兩個(gè)32位的變量,用public定義他在類中所有成員間共享
public apr as boolean = false '聲明兩個(gè)32位的變量,用public定義他在類中所有成員間共享并初始化他的值為false
public sub new() '新建一個(gè)窗體
mybase.new() '調(diào)用
form1 = me '定義me關(guān)鍵字的當(dāng)前值為form1
'this call is required by the win form designer.
initializecomponent() '在這個(gè)下面寫的代碼等同于vb6的form_ load中所寫的代碼
call me_load() '你可以寫一個(gè)子過程,在這里調(diào)用他,當(dāng)然你完全可以寫成別的過程名如me_beginform
'todo: add any initialization after the initializecomponent() call
end sub
'form overrides dispose to clean up the component list.
public overrides sub dispose() '在這個(gè)下面寫的代碼等同于vb6的form_ unload中所寫的代碼
mybase.dispose() '調(diào)用
components.dispose() 'unload組件
end sub
下面一段#region " windows form designer generated code "是不必看的,
我全部寫在這里是為了您可以直接粘貼運(yùn)行
#region " windows form designer generated code "
'required by the windows form designer
private components as system.componentmodel.container
private withevents label2 as system.winforms.label
private withevents lab4 as system.winforms.label
private withevents lab3 as system.winforms.label
private withevents lab2 as system.winforms.label
private withevents lbblue as system.winforms.label
private withevents lbgreen as system.winforms.label
private withevents lbred as system.winforms.label
private withevents button1 as system.winforms.button
private withevents label1 as system.winforms.label
private withevents picturebox1 as system.winforms.picturebox
dim withevents form1 as system.winforms.form
'note: the following procedure is required by the windows form designer
'it can be modified using the windows form designer.
'do not modify it using the code editor.
private sub initializecomponent()
dim resources as system.resources.resourcemanager = new system.resources.resourcemanager(gettype(form1))
me.components = new system.componentmodel.container()
me.lbblue = new system.winforms.label()
me.lab2 = new system.winforms.label()
me.label2 = new system.winforms.label()
me.label1 = new system.winforms.label()
me.lab3 = new system.winforms.label()
me.lbgreen = new system.winforms.label()
me.lbred = new system.winforms.label()
me.lab4 = new system.winforms.label()
me.picturebox1 = new system.winforms.picturebox()
me.button1 = new system.winforms.button()
'@design me.trayheight = 0
'@design me.traylargeicon = false
'@design me.trayautoarrange = true
lbblue.location = new system.drawing.point(216, 200)
lbblue.size = new system.drawing.size(112, 32)
lbblue.borderstyle = system.winforms.borderstyle.fixed3d
lbblue.tabindex = 6
lbblue.backcolor = system.drawing.color.blue
lab2.location = new system.drawing.point(8, 176)
lab2.text = "r="
lab2.size = new system.drawing.size(100, 23)
lab2.forecolor = system.drawing.systemcolors.activecaptiontext
lab2.font = new system.drawing.font("宋體", 12!, system.drawing.fontstyle.bold)
lab2.tabindex = 7
label2.location = new system.drawing.point(248, 8)
label2.size = new system.drawing.size(48, 96)
label2.borderstyle = system.winforms.borderstyle.fixed3d
label2.tabindex = 10
label1.location = new system.drawing.point(192, 80)
label1.size = new system.drawing.size(48, 88)
label1.borderstyle = system.winforms.borderstyle.fixed3d
label1.tabindex = 1
lab3.location = new system.drawing.point(112, 176)
lab3.text = "g="
lab3.size = new system.drawing.size(104, 24)
lab3.forecolor = system.drawing.systemcolors.activecaptiontext
lab3.font = new system.drawing.font("宋體", 12!, system.drawing.fontstyle.bold)
lab3.tabindex = 8
lbgreen.location = new system.drawing.point(112, 200)
lbgreen.size = new system.drawing.size(104, 32)
lbgreen.borderstyle = system.winforms.borderstyle.fixed3d
lbgreen.tabindex = 5
lbgreen.backcolor = system.drawing.color.lime
lbred.location = new system.drawing.point(8, 200)
lbred.size = new system.drawing.size(104, 32)
lbred.borderstyle = system.winforms.borderstyle.fixed3d
lbred.tabindex = 4
lbred.backcolor = system.drawing.color.red
lab4.location = new system.drawing.point(216, 176)
lab4.text = "b="
lab4.size = new system.drawing.size(112, 24)
lab4.forecolor = system.drawing.systemcolors.activecaptiontext
lab4.font = new system.drawing.font("宋體", 12!, system.drawing.fontstyle.bold)
lab4.tabindex = 9
picturebox1.cursor = system.drawing.cursors.hand
picturebox1.backgroundimage = ctype(resources.getobject("picturebox1.backgroundimage"), system.drawing.image)
picturebox1.location = new system.drawing.point(8, 8)
picturebox1.size = new system.drawing.size(176, 168)
picturebox1.tabindex = 0
picturebox1.tabstop = false
button1.location = new system.drawing.point(304, 48)
button1.forecolor = system.drawing.systemcolors.controllightlight
button1.size = new system.drawing.size(24, 120)
button1.tabindex = 2
button1.text = "退出"
me.text = "form1"
me.autoscalebasesize = new system.drawing.size(6, 14)
me.borderstyle = system.winforms.formborderstyle.none
me.backcolor = system.drawing.color.black
me.clientsize = new system.drawing.size(344, 256)
me.opacity = 0.8#
me.controls.add(label2)
me.controls.add(lab4)
me.controls.add(lab3)
me.controls.add(lab2)
me.controls.add(lbblue)
me.controls.add(lbgreen)
me.controls.add(lbred)
me.controls.add(button1)
me.controls.add(label1)
me.controls.add(picturebox1)
end sub
#end region
上面一段#region " windows form designer generated code "是不必看的,
我全部寫在這里是為了您可以直接粘貼運(yùn)行
sub me_load()
system.winforms.messagebox.show("歡迎使用我的第一個(gè)vb.net程序", "微型取色器", messagebox.ok bitor messagebox.iconasterisk)
end sub
protected sub button1_click(byval sender as object, byval e as system.eventargs) 'sender是發(fā)送數(shù)據(jù)的對象,e是按收參數(shù)的對象
end '退出程序
end sub
protected sub picturebox1_click(byval sender as object, byval e as system.eventargs) 'sender是發(fā)送數(shù)據(jù)的對象,e是按收參數(shù)的對象
if apr = true then system.winforms.messagebox.show("請將鼠標(biāo)重新移入再次取色", "微型取色器", messagebox.ok bitor messagebox.iconasterisk)
apr = true '選定色彩以后,rgb的分析就停止
label2.backcolor = label1.backcolor '把源色彩傳到目的色彩
end sub
public function getpixel() as system.drawing.color '這個(gè)也是函數(shù)的一個(gè)alias
dim pm as system.drawing.bitmap '聲明一個(gè)對象
pm = picturebox1.backgroundimage '設(shè)置一個(gè)實(shí)例(注意前面的option strict off不能少)
return pm.getpixel(pixx, pixy) '使用return返回一個(gè)值給函數(shù),這是調(diào)用system.drawing.bitmap類的getpixel函數(shù)
'如果是一個(gè)成員過程,不是一個(gè)函數(shù),請用調(diào)用過程的方法調(diào)用,如system.drawing.bitmap類的setpixel過程:
'public sub setpixel(byval x as integer, byval y as integer, byval pcolor as system.drawing.color)
'dim pm as system.drawing.bitmap
'pm = picturebox1.backgroundimage
'pm.setpixel(x, y, pcolor)
'end sub '當(dāng)然這個(gè)代碼是不能放在函數(shù)里面的了!!!
end function
public sub picturebox1_mousemove(byval sender as object, byval e as system.winforms.mouseeventargs) handles picturebox1.mousemove
dim pcolor as system.drawing.color '聲明一個(gè)color類型的變量
dim strpc as string '聲明一個(gè)string類型的變量
dim cltmpa, cltmpr, cltmpg, cltmpb as string '聲明三個(gè)string類型的變量
if apr then exit sub '給一點(diǎn)時(shí)間好取定一個(gè)像素
pcolor = getpixel '調(diào)用了getpixel,你也可以通過使用括號中的參數(shù)傳第x,y的值,在這個(gè)示例中使用公用變量pixx,pixy
label1.backcolor = pcolor '設(shè)定label1控件的背景色
strpc = pcolor.tostring 'tostring是把pcolor從system.drawing.color轉(zhuǎn)為string的數(shù)據(jù)
pixx = e.x 'e是參數(shù),也被當(dāng)作一個(gè)對象,e.x是對象的一個(gè)成員,指明鼠標(biāo)的當(dāng)前坐標(biāo)x值
pixy = e.y : label1.backcolor = getpixel '鍵盤不靈,回車不了,只好打“:”代替分行
cltmpa = strpc.substring(strpc.indexof("a"), (strpc.indexof("r") - 2) - strpc.indexof("a")) 'substring 就替我們sub一部份string,就好象vb6的mid函數(shù),取代left,right函數(shù)
cltmpa = cltmpa.substring(cltmpa.indexof("=") + 1, cltmpa.length - (cltmpa.indexof("=") + 1)) 'substring 就替我們sub一部份string,就好象vb6的mid函數(shù),取代left,right函數(shù)
'取得紅色
cltmpr = strpc.substring(strpc.indexof("r"), (strpc.indexof("g") - 2) - strpc.indexof("r")) 'substring 就替我們sub一部份string,就好象vb6的mid函數(shù),取代left,right函數(shù)
cltmpr = cltmpr.substring(cltmpr.indexof("=") + 1, cltmpr.length - (cltmpr.indexof("=") + 1)) 'substring 就替我們sub一部份string,就好象vb6的mid函數(shù),取代left,right函數(shù)
'取得綠色
cltmpg = strpc.substring(strpc.indexof("g"), (strpc.indexof("b") - 2) - strpc.indexof("g")) 'substring 就替我們sub一部份string,就好象vb6的mid函數(shù),取代left,right函數(shù)
cltmpg = cltmpg.substring(cltmpg.indexof("=") + 1, cltmpg.length - (cltmpg.indexof("=") + 1)) 'substring 就替我們sub一部份string,就好象vb6的mid函數(shù),取代left,right函數(shù)
'取得藍(lán)色
cltmpb = strpc.substring(strpc.indexof("b"), strpc.length - strpc.indexof("b") - 1) 'substring 就替我們sub一部份string,就好象vb6的mid函數(shù),取代left,right函數(shù)
cltmpb = cltmpb.substring(cltmpb.indexof("=") + 1, cltmpb.length - (cltmpb.indexof("=") + 1)) 'substring 就替我們sub一部份string,就好象vb6的mid函數(shù),取代left,right函數(shù)
lbred.backcolor = system.drawing.color.fromargb(cltmpa.toint32, cltmpr.toint32, 0, 0) 'fromargb就是vb6的rgb一樣,只是在第一位多一個(gè)阿爾法(alpha)參數(shù)
lbgreen.backcolor = system.drawing.color.fromargb(cltmpa.toint32, 0, cltmpg.toint32, 0) '提取綠色
lbblue.backcolor = system.drawing.color.fromargb(cltmpa.toint32, 0, 0, cltmpb.toint32) '提取藍(lán)色
lab2.text = "r=" & cltmpa '顯示r值
lab3.text = "g=" & cltmpg '顯示g值
lab4.text = "b=" & cltmpb '顯示b值
end sub
'cool啊,拖動是沒有邊框的
private sub form1_mousedown(byval eventsender as object, byval e as system.winforms.mouseeventargs)
'mousedown的事件中窗體中的下拉列表是找不到的,自己寫一個(gè)吧,加上(byval eventsender as object, byval e as system.winforms.mouseeventargs)即可
'me.capture() = false '釋放鼠標(biāo)捕獲,等同于api的releasecapture()
'me.sendmessage(&ha1s, 2, 0) '唔,這個(gè)就是哪個(gè)sendmessage的api了,只是第一個(gè)句柄參數(shù)不再用了。
end sub
public sub picturebox1_mouseleave(byval sender as object, byval e as system.eventargs) handles picturebox1.mouseleave
apr = false '這個(gè)很有用的了,就是鼠標(biāo)離開一個(gè)控件時(shí)以生的事件,這樣的話,做一個(gè)動態(tài)3d按鈕就很方便了
end sub
end class
本文是面向?qū)ο蟮模▽τ趘b。net的入門者),我不保證在基于傳統(tǒng)的面向?qū)ο蟮睦碚撚星獾牡胤剑ㄎ覐膩頉]有面向?qū)ο筮^,我也并不是很喜歡面向?qū)ο?起碼再怎么面向也面向不出第二個(gè)windows來),
但這篇文章確實(shí)能使初學(xué)者(我相信困惑于此的人不少吧)快速運(yùn)用vb.net編出簡單的程序,
我的貼文是想激勵更多的人來“未必多了他(vb。net)”。
if
如果你是a(sp),b(asic),c(xx),d(elphi),e(xp),f(ox),g(o)的行家
and 是不屑與我等庸手為伍的
then 這篇文章實(shí)在沒有看的必要(作為中國后備程序員,請?jiān)徫矣写送ú《悟}很多)
else
仍然,衷心地期待您的不吝賜教 vb.net中文站網(wǎng)址:http://vbnetcn.126.com
end if
vb.net中文站今天基本搞好了 示例源程序請到網(wǎng)站 相關(guān)下載 200k (4月16日)