vb的两个小问题

时间:2021-11-19 13:05:54
问题1:进度条上有一个显示进度百分比的label,想把label做成透明的,进度条没到label时是form背景色,进度条到了label时是进度条的兰色,不会弄了,看网上说用backstyle设置,但VS2012中没有这个属性,怎么才能实现这个功能呢?
问题2:在文本框里输出计算的结果(数字)时,数字比较多而且位数不一样,两个数字间用了两个空格,所以输出自动换行时有的就把空格赶在了行首,不好看,也不符合我们的习惯,如果强制换行,又因为数字位数不一样,有的在强制换行前一行就满了,自动换行了,造成下一行只有一两个数字的时候又强制换行了,怎么解决呢?
本人业余,小白级别,大虾们别笑啊,用的是VS2012的VB环境。

9 个解决方案

#1


1.我不明白你label都透明了,那字怎么分辨出来

2.你一行放一个数字不行吗。不太明白什么意思,你要做成什么样

#2


我想要的结果是只显示label上的数字,因为label在进度条经过的地方,效果就象那只有一个显示进度百分比的数字,不影响背景颜色的变化。
要输出几百个数字,一行可以有一二十个呢,要一行放一个就不现实了,想要的是每行都能输出满,但又不能把两个数字间的空格赶到行首

#3


引用 2 楼 gbxokey 的回复:
我想要的结果是只显示label上的数字,因为label在进度条经过的地方,效果就象那只有一个显示进度百分比的数字,不影响背景颜色的变化。
要输出几百个数字,一行可以有一二十个呢,要一行放一个就不现实了,想要的是每行都能输出满,但又不能把两个数字间的空格赶到行首


哦明白了,你要label的background是透明的是吧,你可以找一下label有没有属性叫background或者background color的属性,而且我记得label是默认背景色透明的

对于数字的话你就是要一行尽可能放满数字但是不换行是吧。那可以这样,先把所有数字都转换成string,确定一行可以容纳的最大字符数量,声明一个暂时储存一行输出的字符串比如叫temp,每次判断一行的最大字符数量减去temp.length是否大于你要放入的下一个数字string的length,如果是的话就放进这个temp,否则就print,进入下一行的输出。每个temp之间用vbcrlf(回车换行转义符)

#4


vs2012中的label没有VB6中label的backstyle和background属性,有一个backcolor属性,但不管怎样设置,即使设置成transparent,在进度条过去之后还是一个不透明的框,出不来那种透明的效果。
原来想这样输出,但觉得麻烦,有没有更好的方法输出呢?

#5


引用 4 楼 gbxokey 的回复:
vs2012中的label没有VB6中label的backstyle和background属性,有一个backcolor属性,但不管怎样设置,即使设置成transparent,在进度条过去之后还是一个不透明的框,出不来那种透明的效果。
原来想这样输出,但觉得麻烦,有没有更好的方法输出呢?


我去试试看。实在不行的话不要用win32窗体了换wpf的话就没这种问题了,而且各种效果很好做

#6


谢谢啊,采纳你的建议,以后用WPF

#7


引用 4 楼 gbxokey 的回复:
vs2012中的label没有VB6中label的backstyle和background属性,有一个backcolor属性,但不管怎样设置,即使设置成transparent,在进度条过去之后还是一个不透明的框,出不来那种透明的效果。
原来想这样输出,但觉得麻烦,有没有更好的方法输出呢?


的确设置成transparent也无效
1.我也不知道怎么解决了...要么换WPF用textblock。虽然WPF比win32好很多很多但是我估计你看到那个设计器和xaml要吓一跳...
2.就我知道的而言,只能这样输出,其实也不麻烦
dim temp as string
for each num as integer in numberArray
   if MaxLength- temp.length>num.tostring.length then
            temp+=num.tostring
   else
            print(temp)
            temp=num.tostring
   end if 
next
差不多这样,很短的

#8


或者你可以这样,win32窗体调用WPF的控件,你可以网上找找,用textblock应该是可以的

#9


刚试了一下,label说不支持透明背景色,textbox也不支持,正常方法应该是不行了。不嫌麻烦可以GDI自己画上去..

#1


1.我不明白你label都透明了,那字怎么分辨出来

2.你一行放一个数字不行吗。不太明白什么意思,你要做成什么样

#2


我想要的结果是只显示label上的数字,因为label在进度条经过的地方,效果就象那只有一个显示进度百分比的数字,不影响背景颜色的变化。
要输出几百个数字,一行可以有一二十个呢,要一行放一个就不现实了,想要的是每行都能输出满,但又不能把两个数字间的空格赶到行首

#3


引用 2 楼 gbxokey 的回复:
我想要的结果是只显示label上的数字,因为label在进度条经过的地方,效果就象那只有一个显示进度百分比的数字,不影响背景颜色的变化。
要输出几百个数字,一行可以有一二十个呢,要一行放一个就不现实了,想要的是每行都能输出满,但又不能把两个数字间的空格赶到行首


哦明白了,你要label的background是透明的是吧,你可以找一下label有没有属性叫background或者background color的属性,而且我记得label是默认背景色透明的

对于数字的话你就是要一行尽可能放满数字但是不换行是吧。那可以这样,先把所有数字都转换成string,确定一行可以容纳的最大字符数量,声明一个暂时储存一行输出的字符串比如叫temp,每次判断一行的最大字符数量减去temp.length是否大于你要放入的下一个数字string的length,如果是的话就放进这个temp,否则就print,进入下一行的输出。每个temp之间用vbcrlf(回车换行转义符)

#4


vs2012中的label没有VB6中label的backstyle和background属性,有一个backcolor属性,但不管怎样设置,即使设置成transparent,在进度条过去之后还是一个不透明的框,出不来那种透明的效果。
原来想这样输出,但觉得麻烦,有没有更好的方法输出呢?

#5


引用 4 楼 gbxokey 的回复:
vs2012中的label没有VB6中label的backstyle和background属性,有一个backcolor属性,但不管怎样设置,即使设置成transparent,在进度条过去之后还是一个不透明的框,出不来那种透明的效果。
原来想这样输出,但觉得麻烦,有没有更好的方法输出呢?


我去试试看。实在不行的话不要用win32窗体了换wpf的话就没这种问题了,而且各种效果很好做

#6


谢谢啊,采纳你的建议,以后用WPF

#7


引用 4 楼 gbxokey 的回复:
vs2012中的label没有VB6中label的backstyle和background属性,有一个backcolor属性,但不管怎样设置,即使设置成transparent,在进度条过去之后还是一个不透明的框,出不来那种透明的效果。
原来想这样输出,但觉得麻烦,有没有更好的方法输出呢?


的确设置成transparent也无效
1.我也不知道怎么解决了...要么换WPF用textblock。虽然WPF比win32好很多很多但是我估计你看到那个设计器和xaml要吓一跳...
2.就我知道的而言,只能这样输出,其实也不麻烦
dim temp as string
for each num as integer in numberArray
   if MaxLength- temp.length>num.tostring.length then
            temp+=num.tostring
   else
            print(temp)
            temp=num.tostring
   end if 
next
差不多这样,很短的

#8


或者你可以这样,win32窗体调用WPF的控件,你可以网上找找,用textblock应该是可以的

#9


刚试了一下,label说不支持透明背景色,textbox也不支持,正常方法应该是不行了。不嫌麻烦可以GDI自己画上去..