vb一些问题
vb吧
全部回复
仅看楼主
level 8
tbzp666 楼主
格式 :for i=初值 to 终值! step 步长 。为什么可以避免误差?

For i = 1.05 To 1.95! Step 0.1
Print i
Next i
而下面这个不行
For i = 1.05! To 1.95! Step 0.1
Print i
Next i
这个又可以了,但循环次数减少了
For i = 1.05! To 1.95! Step 0.1!
Print i
Next i
2023年11月13日 05点11分 1
level 13
新手为什么都不喜欢声明变量,正常写法就可以
Dim i As Single
For i = 1.05 To 1.95 Step 0.1
Print i
Next
2023年11月13日 08点11分 2
就是数学里的同理
2023年11月29日 23点11分
没声明变量的写法都是自己给自己添堵,原本声明变量就不会出现这种情况,也不需要找人问,这就是新手一大堆问题,进步却很慢,一问一答也要时间。如果自己解决不是可以省下很多时间
2023年11月13日 08点11分
@隨風🍁缒夢 大哥,看清我问的,我当然知道有误差,3个例子不一样
2023年11月14日 10点11分
这个代码跟楼主的第三段代码是同一个效果
2023年11月14日 11点11分
level 13
原因是i没声明类型是可变类型Variant,for 中 1.05强制转成了Double型
2023年11月13日 08点11分 3
level 15
楼主你的三段代码,第三段中i的类型跟2楼代码一样是Single,因为其中三个常数都是Single,而前两段代码都是Single和Double混合,因此i也是更大的Double类型
至于前两段代码的差异,第一段的初始值是Double类型,因此更精确,误差没有显现出来(也就是你说的“避免误差”),而第二段的初始值是Single类型,赋值给Double类型的i,Single较大的误差就被放大显现出来了
然后,关于循环次数的问题,1.95减去1.05比9个0.1要小(前提是三个数类型一致),所以会少循环一次,而单精度的1.95减去任意类型的1.05比9个双精度的0.1要大,就可以多循环一次了
2023年11月14日 11点11分 4
[大拇指]
2023年11月14日 11点11分
level 5
Vb的安装包楼主能给个链接吗
2023年11月15日 11点11分 5
@tbzp666 这个win11上能用吗
2023年11月15日 12点11分
@tony1john 华军比较安全,都可以
2023年11月15日 13点11分
谢了
2023年11月15日 13点11分
level 8
tbzp666 楼主
第二问:VB怎么修改初始窗体的Font属性默认大小(如在窗体上创建Label,它的caption属性字体大小),不是代码的字体大小。每次新建窗体都要调,烦死了。
2023年11月18日 07点11分 6
level 8
tbzp666 楼主
第三问:创建一个文件,把text1.text的内容作为文件名
要求①在当前工程所在文件夹下,②创建一个文本文件
③删除刚才创建的所有文件(某一同种类型的)
我的代码是
Open App.Path & "\" & Text1.Text & ".txt" For Output As #1
Close #1
删除怎么做?
2023年11月18日 09点11分 7
判断文件是否存在?
2023年11月18日 09点11分
没看懂你要删什么文件……肯定不是删除刚创建的文件吧,不然你创建它还有啥意义?难道是“删除所有的文本文件(除了刚创建的文件)”?那你为啥不交换一下第2、3步的顺序呢,先删除所有文本文件:Kill App.Path & "\*.txt",然后再创建新的文本文件
2023年11月18日 09点11分
@初音✨七奈 字都看得懂连起来愣是没看懂[滑稽]总感觉楼主能搞出一些奇奇怪怪的东西
2023年11月18日 09点11分
@总裁大人👻 我在翻以前的帖子,查漏补缺。
2023年11月18日 10点11分
level 8
tbzp666 楼主
第四问,①有些控件的属性很奇怪,分明是只读属性,为什么在代码窗口中写出控件名后加"."还能出现对应的属性,如command1.name,如Text1.MultiLine等等,
“控件名.”后出现这些只读属性有什么用呢?是不是VB设计上的失误?
②创建控件数组后,在控件名后按下"."后会出现4个属性(Count、Item、LBound、UBound)其中Item属性是什么意思,总不会是下标吧?count是长度,lbound是下界,ubound是上界
③打开一个已经建好的工程,没有经过任何改动,点击右上角的“关闭按钮”后为什么会出现如下对话框
2023年11月20日 03点11分 9
为什么总能钻牛角问些奇奇怪怪的问题呢[汗] 1、只读属性虽然不能修改,但是就不允许别人获取它的值吗? 2、Item是项,简单的说就可以直接指代控件,比如Text1.Item(0)就是Text1(0)控件,Text1(0).Text与Text1.Item(0).Text等价 3、出现保存更改肯定是有改动过,即使是加了一句代码又删了也算
2023年11月20日 08点11分
第三条,打开一个窗体的界面设计或代码窗口,或者调整这些窗口的位置和大小,也算改动,会影响工程的vbw文件,这个文件没有别的用处,就是记录VB环境中打开的窗口位置和大小用的
2023年11月20日 13点11分
@初音✨七奈 明白了,第一条只读属性设置成代码形式有什么用
2023年11月20日 13点11分
@总裁大人👻 感谢大哥
2023年11月20日 13点11分
level 8
tbzp666 楼主
第五问,求大数据怎么操作,已经超过精度限制了
求圆周率前100位各数字出现次数
或则给个思路,求圆周率的详细步骤
2023年11月24日 01点11分 10
2.其他的大数据如何做?
2023年11月24日 01点11分
@tbzp666 可不可以用数值分解分开存储
2023年12月09日 08点12分
@FLSans😜 如何做
2023年12月09日 12点12分
@tbzp666 比如说用一些integer类型的变量,整个10000进制,第一个变量到达10000后清0再给第二个变量加1,这样只用integer也能表达很大的数字
2023年12月09日 16点12分
level 8
tbzp666 楼主
第六问
为什么Print 50*1000会出现“溢出”错误,它又不是变量。难道常量也有个范围限制?①
②Dim t As Single
t = 50 * 1000
Print t
也会出现“溢出”错误
2023年11月28日 09点11分 11
50和1000你没定义默认Integer类型,相乘还是Integer,5w超出上限32767了
2023年11月28日 10点11分
@总裁大人👻 谢啦,大哥。这个基础知识不注意就漏掉了
2023年11月28日 10点11分
@tbzp666 整数默认类型是Integer(除非超出范围),浮点数默认类型是Double
2023年11月28日 10点11分
@初音✨七奈 谢谢大佬
2023年11月28日 10点11分
level 8
tbzp666 楼主
第七问:加载Picturebox中某一点的坐标怎么表示
该点横坐标设为XX,纵坐标设为YY
①Picture1的left、top、height、width确定,Picture1上的某一点(XX,YY)XX=?,YY=?
② 如果有如下三行
Picture1.ScaleMode = 0
Picture1.ScaleMode = 3
Picture1.Scale (-100, 100)-(100, -100)
如果我想找它的中心(0,0),XX=?,YY=?
我想在Picture上画一个石英钟,需要找到它的中心。画一个line控件(秒针)(x2,y2)怎么表示
2023年12月01日 11点12分 12
level 15
回复12楼:
感觉你自己都不知道自己想问啥……前两个小问题都毫无意义,我只回答你最后一个问题(实际上应该算两个)
1.如何表示图片框中心点的坐标?
无论你是否用Scale自定义了坐标系,都可以用如下坐标表示中心点:
x = Picture1.ScaleLeft + Picture1.ScaleWidth / 2
y = Picture1.ScaleTop + Picture1.ScaleHeight / 2
在非自定义坐标系中(ScaleMode不为0),ScaleLeft和ScaleTop都是0,因此以上式子可以简化为:
x = Picture1.ScaleWidth / 2
y = Picture1.ScaleHeight / 2
而如果你自定义了坐标系,把原点(0,0)定义在了中心点,然后你问中心点的坐标是什么?这不废话么,你自己都说了中心点的坐标是(0,0)了,还用问?
2.想画一个钟表的秒针,如何表示末端坐标?
这里我只打算说这个末端坐标(x2,y2)相对于中心点的坐标,因为Line有个Step功能,就是用相对前一个点的坐标来表示后一个点
设秒针长度为r,与12点的夹角为a,当前秒数为s,用s表示a就是:a=s*6*pi/180,其中pi为圆周率(请自行定义)
然后用r和a即可表示出x2与y2:
x2 = r * Sin(a)
y2 = r * Cos(a)
这里需要注意一下方向,当x轴正方向向右、y轴正方向向上时,才可以用以上关系式,此时需要自定义坐标系;如果不自定义坐标系,y轴的正方向默认为向下,则y2需要改成-r*Cos(a),即加个负号
然后这个秒针就可以这样画出来了:(以下ScaleMode不为0)
Picture1.Line (Picture1.ScaleWidth / 2, Picture1.ScaleHeight / 2)-Step(x2, y2)
2023年12月01日 12点12分 13
我可以在窗体上画出石英钟,但在图片框中不知道怎么表示。主要是把(XX,YY)当做一个动点,不知道如何表示。 如果XX=0,yy=0,那么秒针line1的起点(xx,yy)就位于中心啦?
2023年12月01日 13点12分
很显然,不能这样设XX=0,yy=0,这样就变成窗体了。
2023年12月01日 13点12分
@tbzp666 我完全看不懂你的疑问点在哪……你自己设想的(XX,YY)这一点,根本没有任何意义,我的回答中完全没有用到它,我不知道这一点对你来说有什么重要性
2023年12月01日 13点12分
好吧,我突然反应过来一个事情:你是要用Line控件啊……我用的是Line绘图方法,这个比控件方便,也不存在必须计算绝对坐标的麻烦事;但是如果你执着于使用控件的话,我这里的中心点坐标加上末端的相对坐标就是绝对坐标了
2023年12月01日 14点12分
level 8
tbzp666 楼主
2023年12月06日 06点12分 15
level 8
tbzp666 楼主
第八问,怎么实现图片的水平翻转和垂直翻转
Picturebox可以用Paintpicture方法实现,image却不能。
①image怎么实现图片的翻转
②当图片过大时,PictureBox只能看到部分图片,但autosize设置为true时,PictureBox控件又变大了,有没有好方法,可以在不改变PictureBox控件大小的同时又能加载全部图片?(不用image)
2023年12月08日 07点12分 16
1.应该不行 2.你是说想在PictureBox中实现类似Image控件的Stretch属性功能(即将图片缩放到图片框大小)?用PaintPicture啊,把图片框的内部宽度和高度作为图片输出的宽度和高度就是
2023年12月08日 13点12分
2023年12月09日 00点12分
@初音✨七奈 多谢大神
2023年12月09日 00点12分
@初音✨七奈 Picture1.PaintPicture Picture1.Picture, 0, 0, Picture1.Width, Picture1.Height, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight
2023年12月09日 01点12分
level 8
tbzp666 楼主
Rem 在PictureBox中加载一个同样大小的Image
Command5和Command6只能实现一次翻转,不能实现多次翻转
Private Sub Form_Load()
Image1.Picture = LoadPicture(App.Path & "\狗狗.jpg")
With Image1
.Width = 6000: .Height = 3000
End With
Picture1.PaintPicture Image1.Picture, 0, 0, Image1.Width, Image1.Height, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight
End Sub
Private Sub Command1_Click() '放大
Picture1.Width = 2 * Picture1.Width
Picture1.Height = 2 * Picture1.Height
Image1.Width = 2 * Image1.Width
Image1.Height = 2 * Image1.Height
End Sub
Private Sub Command2_Click() '缩小
Picture1.Width = 0.5 * Picture1.Width
Picture1.Height = 0.5 * Picture1.Height
Image1.Width = 0.5 * Image1.Width
Image1.Height = 0.5 * Image1.Height
End Sub
Private Sub Command3_Click() '居中
Picture1.Left = (Me.ScaleWidth - Picture1.Width) / 2
Picture1.Top = (Me.ScaleHeight - Picture1.Height) / 2
End Sub
Private Sub Command4_Click() '还原
With Picture1
.Width = 6000: .Height = 3000
.Left = 2300: .Top = 240
End With
With Image1
.Width = 6000: .Height = 3000
End With
End Sub
Private Sub Command5_Click() '水平翻转
Picture1.PaintPicture Image1.Picture, Picture1.Width, 0, -Picture1.Width, Picture1.Height
End Sub
Private Sub Command6_Click() '垂直翻转
Picture1.PaintPicture Image1.Picture, 0, Picture1.Height, Picture1.Width, -Picture1.Height
End Sub
2023年12月09日 07点12分 17
什么叫“不能实现多次翻转”?是翻转之后翻不回来么?建议改用复选框实现翻转功能,是否翻转(正负号)与复选框的状态关联,这样实现简单,而且界面也直观,一眼就能看出图片是否处于翻转状态
2023年12月09日 07点12分
如果你是说不能同时实现水平和竖直翻转,那么把两个翻转的代码写成一样的就可以,就是同时考虑水平和竖直这两个方向,一起处理
2023年12月09日 07点12分
@初音✨七奈 是的,翻转之后翻不回来
2023年12月09日 12点12分
@初音✨七奈 是这样的么,见18楼
2023年12月09日 12点12分
1 2 尾页