分享
 
 
 

走近VB.Net(三) 源码详解—运用颜色的初步探讨

王朝vb·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

走近VB.Net(三) 源码详解—运用颜色的初步探讨

新建一个工程,加入以下控件

1. label控件:label1,label2,labred ,labblue,labgreen

2. picturebox控件:picturebox1

3. button控件:Button1

设置form1的opacity属性为80%,设置透明的窗体

在office中抓取一幅取色图片存为bmp格式,并设为picturebox1的backgroundimage,即背景图片

Option Strict Off '关闭 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 '声明两个32位的变量,用public定义他在类中所有成员间共享

Public Apr As Boolean = False '声明两个32位的变量,用public定义他在类中所有成员间共享并初始化他的值为false

Public Sub New() '新建一个窗体

MyBase.New() '调用

Form1 = Me '定义me关键字的当前值为form1

'This call is required by the Win Form Designer.

InitializeComponent() '在这个下面写的代码等同于VB6的form_ load中所写的代码

Call me_load() '你可以写一个子过程,在这里调用他,当然你完全可以写成别的过程名如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() '在这个下面写的代码等同于VB6的form_ unload中所写的代码

MyBase.Dispose() '调用

components.Dispose() 'unload组件

End Sub

下面一段#Region " Windows Form Designer generated code "是不必看的,

我全部写在这里是为了您可以直接粘贴运行

#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 "是不必看的,

我全部写在这里是为了您可以直接粘贴运行

Sub me_load()

system.WinForms.MessageBox.show("欢迎使用我的第一个VB.Net程序", "微型取色器", messagebox.OK BitOr messagebox.IconAsterisk)

End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) 'sender是发送数据的对象,e是按收参数的对象

End '退出程序

End Sub

Protected Sub PictureBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) 'sender是发送数据的对象,e是按收参数的对象

If apr = True Then system.WinForms.MessageBox.show("请将鼠标重新移入再次取色", "微型取色器", messagebox.OK BitOr messagebox.IconAsterisk)

apr = True '选定色彩以后,RGB的分析就停止

label2.BackColor = label1.BackColor '把源色彩传到目的色彩

End Sub

Public Function Getpixel() As System.Drawing.Color '这个也是函数的一个Alias

Dim PM As System.Drawing.Bitmap '声明一个对象

PM = PictureBox1.BackgroundImage '设置一个实例(注意前面的Option Strict Off不能少)

Return pm.GetPixel(pixX, pixY) '使用Return返回一个值给函数,这是调用system.drawing.bitmap类的getpixel函数

'如果是一个成员过程,不是一个函数,请用调用过程的方法调用,如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 '当然这个代码是不能放在函数里面的了!!!

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 '声明一个color类型的变量

Dim strPC As String '声明一个String类型的变量

Dim cltmpA, cltmpR, cltmpG, cltmpB As String '声明三个String类型的变量

If apr Then Exit Sub '给一点时间好取定一个像素

PColor = Getpixel '调用了getpixel,你也可以通过使用括号中的参数传第X,Y的值,在这个示例中使用公用变量pixX,pixY

LABEL1.BackColor = PColor '设定LABEL1控件的背景色

strPC = PColor.ToString 'tostring是把pcolor从system.drawing.color转为string的数据

pixX = e.X 'e是参数,也被当作一个对象,e.X是对象的一个成员,指明鼠标的当前坐标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函数,取代left,right函数

CLTMPA = CLTMPA.Substring(CLTMPA.IndexOf("=") + 1, CLTMPA.Length - (CLTMPA.IndexOf("=") + 1)) 'substring 就替我们sub一部份string,就好象VB6的mid函数,取代left,right函数

'取得红色

cltmpR = strPC.Substring(STRPC.IndexOf("R"), (STRPC.INDEXOF("G") - 2) - STRPC.IndexOf("R")) 'substring 就替我们sub一部份string,就好象VB6的mid函数,取代left,right函数

CLTMPR = CLTMPR.Substring(CLTMPR.IndexOf("=") + 1, CLTMPR.Length - (CLTMPR.IndexOf("=") + 1)) 'substring 就替我们sub一部份string,就好象VB6的mid函数,取代left,right函数

'取得绿色

cltmpG = strPC.Substring(STRPC.IndexOf("G"), (STRPC.INDEXOF("B") - 2) - STRPC.IndexOf("G")) 'substring 就替我们sub一部份string,就好象VB6的mid函数,取代left,right函数

CLTMPG = CLTMPG.Substring(CLTMPG.IndexOf("=") + 1, CLTMPG.Length - (CLTMPG.IndexOf("=") + 1)) 'substring 就替我们sub一部份string,就好象VB6的mid函数,取代left,right函数

'取得蓝色

cltmpB = strPC.Substring(STRPC.IndexOf("B"), STRPC.Length - STRPC.IndexOf("B") - 1) 'substring 就替我们sub一部份string,就好象VB6的mid函数,取代left,right函数

CLTMPB = CLTMPB.Substring(CLTMPB.IndexOf("=") + 1, CLTMPB.Length - (CLTMPB.IndexOf("=") + 1)) 'substring 就替我们sub一部份string,就好象VB6的mid函数,取代left,right函数

lbred.BackColor = System.Drawing.Color.FromARGB(CLTMPA.ToInt32, cltmpR.ToInt32, 0, 0) 'fromargb就是VB6的RGB一样,只是在第一位多一个阿尔法(alpha)参数

lbgreen.BackColor = System.Drawing.Color.FromARGB(CLTMPA.ToInt32, 0, cltmpG.ToInt32, 0) '提取绿色

lbblue.BackColor = System.Drawing.Color.FromARGB(CLTMPA.ToInt32, 0, 0, cltmpB.ToInt32) '提取蓝色

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的事件中窗体中的下拉列表是找不到的,自己写一个吧,加上(ByVal eventSender As Object, ByVal e As System.WinForms.MouseEventArgs)即可

'Me.Capture() = False '释放鼠标捕获,等同于API的ReleaseCapture()

'Me.SendMessage(&HA1S, 2, 0) '唔,这个就是哪个sendmessage的API了,只是第一个句柄参数不再用了。

End Sub

Public Sub PictureBox1_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureBox1.MouseLeave

apr = False '这个很有用的了,就是鼠标离开一个控件时以生的事件,这样的话,做一个动态3D按钮就很方便了

End Sub

End Class

本文是面向对象的(对于VB。Net的入门者),我不保证在基于传统的面向对象的理论有曲解的地方(我从来没有面向对象过,我也并不是很喜欢面向对象,起码再怎么面向也面向不出第二个windows来),

但这篇文章确实能使初学者(我相信困惑于此的人不少吧)快速运用VB.Net编出简单的程序,

我的贴文是想激励更多的人来“未必多了他(VB。Net)”。

If

如果你是A(SP),B(ASIC),C(XX),D(ELPHI),E(XP),F(OX),G(O)的行家

And 是不屑与我等庸手为伍的

Then 这篇文章实在没有看的必要(作为中国后备程序员,请原谅我有此通病而牢骚很多)

Else

仍然,衷心地期待您的不吝赐教 VB.Net中文站网址:http://vbnetcn.126.com

End If

VB.Net中文站今天基本搞好了 示例源程序请到网站 相关下载 200k (4月16日)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有