Text1(k-1).BackColor=yanse1
Text1(j-1).BackColor=yanse1
linshi=a(j)
a(j)=a(k)
a(k)=linshi
jiaohuan=jiaohuan+1
DoEvents
Sleep(1000)
Text1(k-1).Text=a(k)
Text1(j-1).Text=a(j)
Text1(k-1).BackColor=yanse
Text1(j-1).BackColor=yanse
EndIf
Ifk=9Then
j=0
k=0
Timer1.Enabled=False
MsgBoxFrame1.Caption&"排序结束"&"共用"&jiaohuan&"次",vbOKOnly+vbInformation,"系统提示"
4、问题:
快捷菜单无法弹出。
解决:
设计到了窗体编辑器,及弹出菜单所使用的方法PopupMenu。
PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,xAsSingle,YAsSingle)
IfButton=2ThenForm1.PopupMenuyoujian'''右键弹出菜单
EndSub
五、收获体会
这是我进入大学以来第一次学习vb,第一次知道了什么是vb,第一次了解到了原来平时我们看到计算机上那些普普通通的小程序需要那么多的代码才能够运行起来,终于发现这其中的奥秘。
学习vb首先就是要对所有常用函数了如指掌,这样在编程的时候才能够很快想到并用对地方,做这个程序设计的一开始,简直是一头雾水,无从下手,后来经过翻书,查找资料,网上资料,等等...终于对所要编的程序有了一定的认识,在同学互相讨论的基础上,终于编出排序演示,但是还存在不足,在动态演示的时候,缺了正在交换文本框的动态形式,但是基本能运行起来,大致的符合了设计任务。
程序中所涉及的内容很多,有比较法排序,插入法排序,冒泡发排序,选择法排序,集合了所有的排序,以前对排序的编程就有点不理解,因为它很绕,真正理解它真的有点困难。
还有一些我们vb书上第七章的一些窗体编辑器,快捷菜单的做法,定时器的编码,这些更加巩固了我对这些知识的理解,通过这几天对vb的深入研究,发现其实慢慢的对vb产生了兴趣,从以前的没兴趣到产生兴趣,这是一种好的现象,兴趣是最好的老师,相信我会越学越好的。
六、源代码
模块:
OptionExplicit
PublicDeclareSubSleepLib"kernel32"(ByValdwMillisecondsAsLong)
颜色设置:
PrivateSubCombo1_Click()
DimiAsInteger
SelectCaseCombo1.ListIndex
Case0
Fori=0To9
Text1(i).BackColor=vbBlue
Nexti
Case1
Fori=0To9
Text1(i).BackColor=vbGreen
Nexti
Case2
Fori=0To9
Text1(i).BackColor=vbRed
Nexti
Case3
Fori=0To9
Text1(i).BackColor=vbYellow
Nexti
EndSelect
EndSub
PrivateSubCombo2_Click()
DimiAsInteger
SelectCaseCombo2.ListIndex
Case0
Fori=0To9
Text1(i).ForeColor=vbBlue
Nexti
Case1
Fori=0To9
Text1(i).ForeColor=vbGreen
Nexti
Case2
Fori=0To9
Text1(i).ForeColor=vbRed
Nexti
Case3
Fori=0To9
Text1(i).ForeColor=vbYellow
Nexti
EndSelect
EndSub
PrivateSubCombo3_Click()
SelectCaseCombo3.ListIndex
Case0
yanse=vbBlue
Case1
yanse=vbGreen
Case2
yanse=vbRed
Case3
yanse=vbYellow
EndSelect
EndSub
PrivateSubCombo4_Click()
SelectCaseCombo4.ListIndex
Case0
yanse1=vbBlue
Case1
yanse1=vbGreen
Case2
yanse1=vbRed
Case3
yanse1=vbYellow
EndSelect
EndSub
退出按钮:
PrivateSubCommand1_Click()
IfMsgBox("您真的要退出吗?
",4+32,"请您确认!
")=vbNoThen
ExitSub
EndIf
UnloadForm1
UnloadForm2
EndSub
产生随机数:
PrivateSubCommand2_Click()
DimiAsInteger
RandomizeTime
Fori=1To10
a(i)=Rnd*200
Text1(i-1).Text=a(i)
Nexti
Command3.Enabled=True
Command4.Enabled=True
EndSub
开始排序直接给出排序结果:
PrivateSubCommand3_Click()
DimiAsInteger,kAsSingle
IfForm1.Optzhijie.ValueThen
IfForm2.Option1.ValueThen
Callbijiao(a)
Fori=1To10
Text1(i-1).Text=a(i)
Next
ElseIfForm2.Option2.ValueThen
Callxuanze(a)
Fori=1To10
Text1(i-1).Text=a(i)
Next
ElseIfForm2.Option3.ValueThen
Callcharu(a)
Fori=1To10
Text1(i-1).Text=a(i)
Next
ElseIfForm2.Option4.ValueThen
Callmaopao(a)
Fori=1To10
Text1(i-1).Text=a(i)
Next
EndIf
Ifa
(1)>a(10)Then
Text2(0).Text=a
(1)
Text2
(1).Text=a(10)
Else
Text2(0).Text=a(10)
Text2
(1).Text=a
(1)
EndIf
Fori=1To10
k=a(i)+k
Nexti
Text2
(2).Text=k/10
EndIf
-----------------------------------------------------------------------------------------
动态演示结果:
IfForm1.Optdongtai.ValueThen
IfForm2.Option1.ValueThen
Timer1.Enabled=True
ElseIfForm2.Option2.ValueThen
Timer1.Enabled=True
ElseIfForm2.Option3.ValueThen
Timer1.Enabled=True
ElseIfForm2.Option4.ValueThen
Timer1.Enabled=True
EndIf
EndIf
EndSub
暂停运行命令:
PrivateSubCommand4_Click()
Dimi%,n%,s%
f=False
Timer1.Enabled=False
Timer1.Interval=1000
Fori=1Ton
s=n+1
Nexti
Sleep(n)
EndSub
默认:
PrivateSubCommand5_Click()
Dimi%
Fori=0To9
Combo1.Text="蓝色"
Combo2.Text="绿色"
Combo3.Text="红色"
Combo4.Text="黄色"
Text1(i).BackColor=vbBlue
Text1(i).ForeColor=vbGreen
yanse=vbRed
yanse1=vbYellow
Next
EndSub
窗体启动的时候加载的程序:
PrivateSubForm_Load()
Command3.Enabled=False
Command4.Enabled=False
Frame4.Visible=False
Form2.Option1.Value=True
EndSub
快捷菜单:
PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
IfButton=2ThenForm1.PopupMenuyoujian
EndSub
速度
PrivateSubHScroll1_Change()
Timer1.Interval=HScroll1.Smallchange
EndSub
菜单退出的按钮:
PrivateSubmnu_end_Click()
UnloadForm1
UnloadForm2
EndSub
显示设置按钮:
PrivateSubmnu_set_Click()
Ifmnu_set.Checked=TrueThen
Form1.Height=Form1.Height+1650
Frame4.Visible=True
mnu_set.Checked=False
ElseIfmnu_set.Checked=FalseThen
Form1.Height=Form1.Height-1650
mnu_set.Checked=True
EndIf
EndSub
写入数据:
PrivateSubshujuxie_Click()
DimiAsInteger
OpenApp.Path+"\data.txt"ForOutputAs#1
Fori=1To10
Write#1,a(i);
Nexti
Close#1
EndSub
显示窗体2:
PrivateSubsuanfa_Click()
Form2.Show
EndSub
时间控件用来动态演示:
PrivateSubTimer1_Timer()
StatickAsInteger,jAsInteger,linshiAsInteger,jiaohuanAsInteger,iAsInteger
DimXAsInteger,mAsSingle
f=True
Iff=FalseThen
ExitSub
EndIf
IfForm2.Option1.ValueThen比较法排序
Ifk=0Then
k=1
j=2
EndIf
Ifj=11Then
k=k+1
j=k+1
EndIf
Ifa(k)>a(j)AndOption1.ValueThen交换元素颜色
Text1(k-1).BackColor=yanse1
Text1(j-1).BackColor=yanse1
DoEvents
CallSleep(1000)
linshi=a(j)
a(j)=a(k)
a(k)=linshi
jiaohuan=jiaohuan+1
Text1(k-1).Text=a(k)
Text1(j-1).Text=a(j)
Text1(k-1).BackColor=yanse已经排序的元素颜色
Text1(j-1).BackColor=yanse
EndIf
Ifa(k)Text1(k-1).BackColor=yanse1
Text1(j-1).BackColor=yanse1
linshi=a(j)
a(j)=a(k)
a(k)=linshi
jiaohuan=jiaohuan+1
DoEvents
Sleep(1000)
Text1(k-1).Text=a(k)
Text1(j-1).Text=a(j)
Text1(k-1).BackColor=yanse
Text1(j-1).BackColor=yanse
EndIf
Ifk=9Then
j=0
k=0
Timer1.Enabled=False
MsgBoxFrame1.Caption&"排序结束"&"交换次数为:
"&jiaohuan&"次",vbOKOnly+vbInformation,"系统提示"
jiaohuan=0
Ifa
(1)>a(10)Then
Text2(0).Text=a
(1)
Text2
(1).Text=a(10)
Else
Text2(0).Text=a(10)
Text2
(1).Text=a
(1)
EndIf
ForX=1To10
m=a(X)+m
NextX
Text2
(2).Text=m/10
EndIf
j=j+1选择法排序
ElseIfForm2.Option2.ValueThen
k=k+1
linshi=a(k+1)
i=k+1
IfOption1.ValueThen
Forj=k+1ToUBound(a)
Iflinshi>a(j)Then
linshi=a(j)
i=j
EndIf
Nextj
Ifa(k)>a(i)Then
Text1(k-1).BackColor=yanse1
Text1(i-1).BackColor=yanse1
DoEvents
Sleep(1000)
linshi=a(i)
a(i)=a(k)
a(k)=linshi
Text1(k-1).Text=a(k)
Text1(i-1).Text=a(i)
jiaohuan=jiaohuan+1
Text1(k-1).BackColor=yanse
Text1(i-1).BackColor=yanse
EndIf
EndIf
IfOption2.ValueThen
Forj=k+1ToUBound(a)
Iflinshilinshi=a(j)
i=j
EndIf
Nextj
Ifa(k)Text1(k-1).BackColor=yanse1
Text1(i-1).BackColor=yanse1
DoEvents
Sleep(1000)
linshi=a(i)
a(i)=a(k)
a(k)=linshi
Text1(k-1).Text=a(k)
Text1(i-1).Text=a(i)
jiaohuan=jiaohuan+1
Text1(k-1).BackColor=yanse
Text1(i-1).BackColor=yanse
EndIf
EndIf
Ifk=9Then
i=0
j=0
k=0
Timer1.Enabled=False
MsgBoxFrame1.Caption&"排序结束"&"交换次数为:
"&jiaohuan&"次",vbOKOnly+vbInformation,"系统提示"
jiaohuan=0
Ifa
(1)>a(10)Then
Text2(0).Text=a
(1)
Text2
(1).Text=a(10)
Else
Text2(0).Text=a(10)
Text2
(1).Text=a
(1)
EndIf
ForX=1To10
m=a(X)+m
NextX
Text2
(2).Text=m/10
EndIf
ElseIfForm2.Option3.ValueThen插入法排序
i=i+1
Forj=1Toi
Ifa(i)Text1(i-1).BackColor=yanse1
Text1(j-1