分享

VB -控件(二)

 悟静 2009-06-02

滚动条常常用来附在某个窗口上帮助观察数据或确定位置,也可以用来作为数据输入的工具。在日常操作中,我们常常遇到这样的情况:在某些程序中,如 Photoshop ,一些具体的数值我们并不清楚,如调色板上的自定义色彩,这时,可以通过滚动条,用尝试的办法找到自己需要的具体数值。

在 Visual Basic 中,滚动条分为横向(HscrollBar)与竖向(VscrollBar)两种,命名规则为:HsbX 或 VsbX ,如 HsbShow、VsbShow ,等等。它们在工具箱上的图标如图一:


图一

选中滚动条按钮,把鼠标指针放到界面设计区,然后拖动,画出符合自己要求的滚动条,或者直接双击该按钮,自动在界面设计区生成默认大小的滚动条,如图二所示:


图二

一、滚动条控件的属性:
1、Max(最大值)与 Min(最小值)属性:
滚动块处于最右边(横向滚动条)或最下边(竖向滚动条)时返回的值就是最大值;滚动块处于最左边或最上边,返回的值最小,如图三所示:


图三

Max 与 Min 属性是创建滚动条控件必须指定的属性,默认状态下, Max 值为 32767 ,Min 值为 0 。本属性既可以在界面设计过程中予以指定,也可以在程序运行中予以改变,如:

HsbShow.Min = 3
HsbShow.Max = 30

2、Value(数值)属性:
Value 属性返回或设置滚动滑块在当前滚动条中的位置,如图三所示。

Value 值可以在设计时指定,也可以在程序运行中改变,如:

HsbShow.Value = 24

3、SmallChange(小改变)属性:
当用户单击滚动条左右边上的箭头时,滚动条控件 Value 值的改变量就是 SmallChange,如图四:


图四

4、LargeChange(大改变)属性:
单击滚动条中滚动框前面或后面的部位时,引发 Value 值按 LargeChange 设定的数值进行改变,如图五:


图五

二、滚动条控件的事件:
与滚动条控件相关的事件主要是 Scroll 与 Change ,当在滚动条内拖动滚动框时会触发 Scroll 事件(但要注意,单击滚动箭头或滚动条时不发生 Scroll 事件),滚动框发生位置改变后则会触发 Change 事件。Scroll 事件用来跟踪滚动条中的动态变化,Change 事件则用来得到滚动条最后的值。

三、示例:
有如图六这样一个应用程序,当滚动条(HsbShow)的滚动块发生位移时,下面的显示标签(LblShow)自动显示滚动条当前的值;在拖动滚动框的过程中,显示标签(LblShow)则会显示“拖动中……”字样。


图六

1、创建界面。
其中,HsbShow 的 Min 为 0 ,Max 为 100 ,SmallChange 为 5 ,LargeChange 为 10 。

2、双击滚动条(HsbShow),进入代码编写窗口:
Private Sub HsbShow_Change()
 LblShow.Caption = "滚动条当前值为:" & HsbShow.Value
End Sub

3、滚动条的拖动事件:
Private Sub HsbShow_Scroll()
 LblShow.Caption = "拖动中……"
End Sub
 

有如图一这样一个应用程序,分别拖动红、绿、蓝三个滚动框来决定文本框的背景色,另外还有一个竖向滚动条,可以用来控制文本框的大小。


图一

一、图像的着色问题:
自然界中千变万化的色彩,在电脑上可以用红绿蓝三种原色组合而成,这也正是图像处理软件中 RGB 模式的原理所在,如黑色是由皆为 0 的红绿蓝三种颜色组成,白色为皆为 255 的三原色合成,等等。

在 RGB 模式中,每种色彩最多有 255 种变化,也就是说,只要 R 、G 、B 三种色彩都在各自的 255 范围内,这种色彩就是有效的。

在 VB 中,也用 RGB 来作为色彩的描述,如文本框的背景色为白色,则表示为:Text1.Backcolor = RGB(255,255,255)。

二、VB 中对象的初值储存问题:
在VB中,常常会对某个对象进行位置移动,或者动态改变对象的尺寸,一般情况下,都会在程序调入后先对原始数据进行一些存储,以便发生位移或改变大小后能恢复原样,而这一功能,是通过初值储存来完成的。

方法是,将原始数据,如坐标值、原始长宽高,等等,赋值给某个变量,最后通过变量的调用就能完成默认状态的恢复。

三、程序设计:
1、创建如图一的程序界面。
文本框的属性:
Name:TxtContent  Text:None

三个表示色彩的标签:
红色标签,Name:LblRed  Caption:红色
绿色标签,Name:LblGreen  Caption:绿色
蓝色标签,Name:LblBlue  Caption:蓝色

三个表示色彩的横向滚动条:
Min:0  Max:255  SmallChange:1  LargeChange:5

显示“大小”字样的标签:
Name:LblSize  Caption:大小

对文本框大小进行控制的竖向滚动条:
Name:VsbSize  Min:0  Max:100  SmallChange:1  LargeChange:5

用于显示大小变化尺寸的标签:
Name:LblShow  Caption:None

2、双击红色滚动条,在弹出的程序代码窗口中输入:
Private Sub HsbRed_Change()
TxtContent.BackColor = RGB(HsbRed.Value, HsbGreen.Value, HsbBlue.Value)
End Sub

另外,就 HsbRed 的 Scroll 事件也输入上面的代码:

Private Sub HsbRed_Scroll()
TxtContent.BackColor = RGB(HsbRed.Value, HsbGreen.Value, HsbBlue.Value)
End Sub

3、同理所得,在绿色与蓝色滚动条中输入相应代码。这样,通过滚动条控制文本框背景色的目的达到了。

4、在“通用”选项中定义全局全量,用来储存文本框的原始尺寸:

Dim Iwidth As Integer
Dim Iheight As Integer

5、用来改变文本框尺寸的竖向滚动条:
Change 事件:
Private Sub VsbSize_Change()
TxtContent.Width = Iwidth * (VsbSize.Value / 100)
TxtContent.Height = Iheight * (VsbSize.Value / 100)
LblShow.Caption = VsbSize.Value & "%"
End Sub

Scroll 事件:
Private Sub VsbSize_Scroll()
TxtContent.Width = Iwidth * (VsbSize.Value / 100)
TxtContent.Height = Iheight * (VsbSize.Value / 100)
LblShow.Caption = VsbSize.Value & "%"
End Sub

6、调试:
按 F5 键进行调试,发现文本框的尺寸无法调整。这是因为,没有在初始状态
下将原文本框的宽度、高度赋值给变量。

在 Form 的 Load 事件中输入以下代码:

Private Sub Form_Load()
Iwidth = TxtContent.Width
Iheight = TxtContent.Height
LblShow.Caption = "100%"
End Sub

7、最后结果如图二:

在 Windows 应用程序中常常要用到时间控制的功能,如在程序界面上显示当前时间,或者每隔多长时间触发一个事件,等等。而 Visual Basic 中的 Timer(时间)控制器就是专门解决这方面问题的控件。

Timer 控制器在工具箱面板上的图标如图一:


图一

选中时钟控制器,将鼠标移到界面设计区,在窗体中拖出一个矩形就可以创建一个 Timer 控件了。跟其他控件不同的是,无论你绘制的矩形有多大,Timer 控件的大小都不会变,如图二:


图二

另外,Timer 控件只有在程序设计过程中看得见,在程序运行时是看不见的。

一、Timer 控件的属性:
Timer 控件可以使用 Name 属性与 Enabled 属性,但最重要的是 Interval 即时间间隔属性。

Interval 属性决定了时钟事件之间的间隔,以毫秒为单位,取值范围为 0 ~ 65535 ,因此其最大时间间隔不能超过 65 秒,即一分钟多一点的时间。如果把 Interval 属性设置为 1000 ,则表示每秒钟触发一个 Timer 事件。

其语法格式:
Timer.Interval = X ,其中,X 代表具体的时间间隔。

二、Timer 控件的 Timer (定时)事件:
当一个 Timer 控件经过预定的时间间隔,将激发计时器的 Timer 事件。使用 Timer 事件可以完成许多实用功能,如显示系统时钟、制作动画,等等。

三、示例:
有如图三这样一个应用程序,标签能够自动显示当前时间。


图三

1、创建程序界面:
界面如图四,为了便于大家观看,我们将 LblShow 的边界类型设为 1 。

另外,别忘了把 Timer1 的 Interval 属性设置为 1000 。


图四

2、在 Timer1 的 Timer 事件中输入以下代码:

Private Sub Timer1_Timer()
LblShow.FontSize = 30
LblShow.FontName = "宋体"
LblShow.Caption = "当前时间为:" & Time
End Sub

注意,Time 是 Visual Basic 中的关键詞,表示显示系统时间。

在一个应用程序中,对文件的处理是一个比较常用的操作,如打开文件、保存文件,等等。Visual Basic 提供了三个控件对磁盘文件夹与文件进行显示与操作,它们分别是:DriveListBox(磁盘列表框)控件、DirListBox(文件夹列表框)控件,以及 FileListBox(文件列表框)控件。如图一:


图一

一、DriveListBox(磁盘列表框)控件:
在工具箱面板上,DriveListBox 控件的图标如图二:


图二

在窗口中创建的磁盘列表框可以自动显示电脑上或网络上的所有磁盘驱动器,另外,还可以通过语法设置运行时显示的驱动器名称,这就要用到 Drive 属性。

磁盘列表框名称.Drive = Drive(如 C: ,或者 D:,等等)。

比如,要在窗体启动时把当前磁盘改为 F 盘,那么:

Private Sub Form_Load()
  Drive1.Drive = "F:"
End Sub


图三

二、DirListBox(文件夹列表框)控件:
在工具箱面板上,DirListBox 控件的图标如图四:


图四

文件夹列表框控件可以显示与设置文件夹的路径,当用户在窗口中创建 DirListBox 控件时,双击其中的文件夹,不需进行编程就能自动显示下一级的文件夹,如图五:


图五

本控件的主要属性是 Path 属性,用来返回或设置当前文件夹的路径,只能在程序运行中使用,其语法是:

文件夹列表框名称.Path = 具体的路径

比如,我们要在窗体启动时把默认显示的文件夹改为 D:\Mytool\ ,程序可以这样写:

Private Sub Form_Load()
Dir1.Path = "D:\Mytool\"
End Sub

三、FileListBox(文件列表框)控件:
跟前面两个控件一样,本控件能够自动显示符合条件的文件清单。如图六:


图六

文件列表框控件主要有两个属性,即 Path 属性与 FileName 属性,前者代表文件的路径,从显示路径的功能上来说,比后者更简便一些;后者则用来返回或设置所选文件的路径与文件名,其语法是:

文件列表框名称.FileName = 路径

比如,我们要在窗体启动时将 E:\稿件 目录下的所有 ZIP 文件列出来,程序可以这样写:

Private Sub Form_Load()
File1.FileName = "E:\稿件\*.zip"
End Sub

结果如图七:


图七

四、三个控件的连接:
上面我们就三个控件进行了分别的学习,在程序中,它们却是互不关连的,并不是只要在窗体中创建了它们,然后对某个控件(如磁盘列表框)进行操作,其他控件就会自动显示相应的磁盘下的文件,这需要用程序进行实现。

1、将磁盘列表框的操作赋值给文件夹列表框的 Path 属性,在磁盘列表框的 Change 事件中输入如下代码:

Private Sub Drive1_Change()
  Dir1.Path = Drive1.Drive
End Sub

2、对文件夹列表框控件进行的操作,直接影响文件列表框所显示的内容:

Private Sub Dir1_Change()
  File1.Path = Dir1.Path
End Sub

最后结果如图八:

窗体犹如一块画布,在设计时是程序的设计区域,而在运行程序时,每个窗体对应于一个窗口。

一、窗体的结构:
窗体结构与普通 Windows 下的窗口非常相似,如图一:

 

 

 

 


图一

系统菜单:Form1.ControlBox,点击它可以弹出菜单命令。

标题栏:Form1.Caption,显示的窗口标题,如本例中的“Form1”。

最小化按钮:Form1.MinButton 。

最大化按钮:Form1.MaxButton 。

二、窗体的主要属性:
1、名称:命名规则为 FrmX ,如 FrmShow 、FrmFirst ,等等,主要用于程序调用。

2、AutoRedraw(自动重画): 本属性控制图像的重建,常用于多窗体程序设计中,语法如下:

窗体名称.AutoRedraw = True/False

当 AutoRedraw 设置为 True 时,那么本窗体被另外的窗体覆盖后,又回到此窗体时,将自动重新刷新或重画窗体上的所有图形;如果是 False ,则必须通过事件过程来设置这一操作。

默认属性为 False。如图二:


图二

3、BackColor(背景色)与 ForeColor(前景色):
前者用来指定窗体的背景色,如图三:


图三

后者用来指定文本或图形的前景色,如图四:


图四

4、Height(高度)与 Width(宽度):
这两个属性用来指定窗体的高度与宽度,其单位是 Twip ,即 1 点的 1/20 (1/1440 英寸)。

如要让窗体的高度变为 200 ,宽度变为 300 ,那么程序应该写成:

Private Sub Form1_Click()
 Form1.Height = 200
 Form1.Width = 300
End Sub

5、Top(顶部)与 Left(左边距)属性:
通过这两个属性可以控制窗体的坐标位置,默认单位是 Twip 。

要注意的是,随对象的不同,这个 Top 与 Left 的意义不同。当对象是窗体,Top 指的是窗体顶部与屏幕顶部的相对距离,Left 指的是窗体左边界与屏幕左边界的间距;当对象是其他控件时,它们分别表示控件顶部、左边与窗体顶部、左边之间的距离,如图五所示:


图五

语法示例:

Private Sub Form1_Click()
 Form1.Top = 200
 Form1.Left = 300
End Sub

上面的语句会把 Form1 窗体移动到距屏幕顶部 200 Twip ,距屏幕左边距 300 Twip 的地方。

6、Visible(可见)属性:
当一个对象的 Visible 属性设置为 False 时,程序运行时不能看见;只有当 Visible 属性值变为 True 时,才能被看见。

本属性虽然简单,但却是常常需要用到的,请大家牢记在心。

三、窗体的主要事件:
1、Load(装入)事件:

窗体最主要的事件,用来在启动程序时对属性和变量进行初始化。程序一旦运行,将自动触发本事件。

2、UnLoad(卸载)事件:
既然有装入事件,自然就有卸载事件,它的作用是从内存中清除一个窗体。卸载后如果要重新装入窗体,那么新装入的窗体上的所有控件都需要重新初始化。

3、Click(单击)与 DblClick(双击)事件:
在以前的学习中,我们已经接触到了 Click 事件,实际上,对一个严谨的程序来说,这种应用不是很普遍,大家知道就行了。

Visual Basic 为编程人员提供了强大的绘图功能支持,在本章,我们将学会基本的绘图方法。

在 VB 中,主要通过两种办法进行图像绘制:一种是利用 ActiveX 控件,如用图形框显示图片;另外一种是通过使用 VB 语言本身的函数和方法,通过在屏幕上绘制点、线和图形来制作。

一、图形框控件的主要属性:
图形框控件(PictureBox)可以用来显示位图、JPGE、GIF、图标等格式的图片,在工具箱面板中,图形框控件的图标如图一:


图一

1、Name 属性:
命名规则为:PicX ,如 PicMove 、PicShow ,等等。

2、Picture(图片)属性:
本属性用来返回或设置控件中要显示的图片,可以通过属性窗口进行设置。如果要在程序运行过程中载入图片,常常使用 LoadPicture 函数,其语法规则为:

对象.Picture = LoadPicture("图形文件的路径与名字")

如:PicMove.Picture = Loadpicture("c:\Picts\pen.bmp")

3、AutoSize(自动显示)属性:
本属性决定了图形框控件是否自动改变大小以显示图片的全部内容。当值为 True ,图象可以自动改变大小以显示全部内容;当值为 False ,则不具备图象的自我调节功能。

二、图形框控件的主要事件:
它可以接收 Click(单击)事件与 DblClick(双击)事件,还可以在图片框中使用 Cls(清屏)、Print 方法。在实际使用过程中,它多是作为一种图形容器出现,所以常常是跟其他控件搭配使用的,如点击一个按钮,图形框自动装入图片,等等。

三、图像框控件(Image)的主要属性:
跟图形框一样,图像框控件也具有诸如 Name、Picture 等属性,以及 Loadpicture 的方法,但在图像自适应问题上有所不同。

PictureBox 用 AutoSize 属性控制图形的尺寸自动适应,而 Image 控件则用 Stretch 属性对图片进行大小调整。如图二:


图二

四、图像框与图形框控件的区别:
1、图形框是“容器”控件,可以作为父控件,而图像框不能作为父控件,其他控件不能作为图像框的子控件。

图形框作为一个“容器”,可以把其他控件放在其内作为它的“子控件”,当图形发生位移,其内的子控件也会跟着一起移动。


图三

2、图形框可以通过 Print 方法显示与接收文本,而图像框不能。

3、图像框比图形框占用内存少,显示速度更快一些,因此,在图形框与图像框都能满足设计需要时,应该优先考虑使用图像框。
 

本节,我们要实现两张不同图片在同一个图形框内的切换,同时可以启用与禁用图形框的自动适应功能。


图一(切换前)


图二(切换后)

一、设计:
1、创建如图一的界面:
显示标签:
Name:LblShow  Caption:现在显示的是第一张图

图形框控件:
Name:PicShow  AutoSize:None

自动适应复选框:
Name:ChkAutoSize

图片切换按钮:
Name:CmdShow  Caption:图片二

2、先在通用区声明如下变量:
Dim X As Integer
Dim IWidth As Integer
Dim IHeight As Integer

其中,X 准备用来做为图片切换的条件,当 X 为 1 ,图片切换按钮可以切换到图片二;当 X 为 2 ,图片切换按钮可以切换到图片一。

IWidth 与 IHeight 准备用来储存图形框的初始宽度与高度,以便在图形框发生大小变化后回复到原样。

3、程序打开时自动载入图片一:
这样,图片切换按钮就应该能够切换到图片二,所以将 1 赋给 X :

Private Sub Form_Load()
PicShow.Picture = LoadPicture("E:\稿件\Ccidnet\vb\image\vb3-2-1-copy.gif")
X = 1
End Sub

4、自动适应功能的实现:
Private Sub ChkStretch_Click()
If ChkStretch.Value = 1 Then
IWidth = PicShow.Width
IHeight = PicShow.Height
PicShow.AutoSize = True
Else
PicShow.AutoSize = False
PicShow.Width = IWidth
PicShow.Height = IHeight
End If
End Sub

上面程序的意思是,如果复选框被选中,那么先将原始图形框的宽度与高度赋给 IWidth、IHeight ,然后再通过激活 PicShow 的 AutoSize 功能达到图形框的自动适应;如果复选框没被选中,那么禁止 PicShow 的 AutoSize 功能,然后将图形框原来的高度(现在的 IHeight)和宽度(现在的 IWidth)赋值给图形框以恢复原样。

5、图片切换:
Private Sub CmdShow_Click()
If X = 1 Then
PicShow.Picture = LoadPicture("E:\稿件\Ccidnet\vb\image\vb3-2-2-copy.gif")
LblShow.Caption = "现在显示的是第二张图"
CmdShow.Caption = "图片一"
X = 2
Else
PicShow.Picture = LoadPicture("E:\稿件\Ccidnet\vb\image\vb3-2-1-copy.gif")
LblShow.Caption = "现在显示的是第一张图"
CmdShow.Caption = "图片二"
X = 1
End If
End Sub

在上面的程序中,先对 X 进行判断,如果 X 为 1 ,那么图形框显示图片二,显示标签改变成“现在显示的是第二张图”字样,作为图形切换的按钮,
Caption 变成“图片一”,然后再让 X 为 2 好进入另外一种情况;当 X 为 2 ,那么图形框显示图片一,显示标签与切换按钮发生相应变化。

二、联想
记得第一次设计这个程序时,并没有引入 X 这个辅助变量,而是通过鼠标点击的动作来进行判断的,即,当原始图形框中显示的是图片一,那么鼠标点击一次,即奇数次,图形框中会切换到图片二;当鼠标点击第二次,即偶数次,图形框可以切换到图片一;以此类推。所以可以通过次数取余,如果余数为 0 ,那么图形框可以切换到图片一;余数为 1 ,图形框可以切换到图片二。

具体程序大家可以自行思考,此处不再赘述。

利用直线与形状控件,可以使窗体上显示的内容更为丰富,如在窗体上增加简单的线条和实心图形,等等。

利用直线控件,可以建立简单的直线,通过修改其属性,还可以改变直线的粗细、色彩,以及线型。

通过设置形状的属性,用户可以画出圆、椭圆,以及圆角矩形,同时还能设置形状的色彩与填充图案。

主要属性:
除了其他通用属性外,直线与形状控件还具有一些比较独特的属性。

1、BorderStyle(边框类型),实用于直线与形状。
TransParent:透明,边框不可见。
Solid:实心边框,最常见。
Dash:虚线边框。
Dot:点线边框。
Dash-Dot:点划线边框。
Dash-Dot-Dot:双点划线边框。
Inside Solid:内实线边框。

2、FillStyle(填充类型),实用于形状。
Solid:实心填充。
TransParent:透明填充。
Horizontal Line:以水平线进行填充。
Vertical Line:以垂直线进行填充。
Upward Diagonal:向上对角线填充。
Downward Diagonal:向下对角线填充。
Cross:交叉线填充。
Diagonal Cross:对角交叉线填充。

3、Shape(形状),实用于形状。
Rectangle:矩形。
Square:正方形。
Oval:椭圆形。
Circle:圆形。
Rounded Rectangle:圆角矩形。
Rounded Square:圆角正方形。

除了前面谈到的用控件显示与绘制图形的方法外,VB 还提供了一组庞大的方法用来绘制点、线、面,以及设置前景、背景色等各种方法。

一、设置当前绘图点:
在 VB 中,可以通过设置窗体或图形框的 CurrentX 与 CurrentY 属性来设置当前绘图点。CurrentX 与 CurrentY 决定了绘制或显示的起始坐标,在设计时,这两个属性不可用。

二、绘制点、线、面的方法:
1、点的绘制法:
在指定对象(如窗体、图形框)上的指定位置处绘制点,还可以为点指定颜色,语法如下:

对象名.Pset (X,Y),[Color]

X ,Y 分别为点的水平与垂直坐标,Color 为点的颜色,是可选项。 2、直线的绘制法:

在对象上绘制直线,语法如下:

对象名.Line (X1,y1) - (X2,Y2), [Color]

(X1,Y1) 是直线的起点,(X2,Y2)是直线的终点,Color 为可选项。

如图一:


图一

2、图形框的代码是:
Private Sub Picture1_Click()
Picture1.Line (350, 1020)-(2050, 1020)
End Sub

3、绘制矩形:
用 Line 方法还可以绘制矩形,语法如下:

对象名.Line (X1,Y1) - (X2,Y2), [Color], B ,[F]

其中,(X1,Y1) 是矩形的左上角座标,(X2,Y2)是矩形右下角座标,Color 为矩形边框的颜色,使用参数 B 而不用 F ,那么矩形用当前的填充色(FillColor)与填充方式(FillStyle)对矩形进行填充;如果使用了参数 F ,那么矩形以边框的颜色进行填充。如图二:


图二

特别注意,用 Line 画矩形框,如果不用其他参数,那么 B 与坐标(X2,Y2)之间应该有两个逗点,一个是紧跟坐标2,一个表示 Color 省略了,如:Picture1.Line (500,500) - (1000,1000),,B

4、绘制圆、椭圆、弧:
用 Circle 方法可以绘制圆、椭圆与弧,语法如下:

对象名.Circle (X,Y), Radius, [Color,start,end,aspect]

其中,(X,Y)是圆、椭圆或弧的圆心坐标,Radius 是半径,这两个参数是必须项;Color 是圆的轮廓色,Start 与 End 是弧的起点与终点位置。其范围是 -2 —— 2Pi ;Aspect 是圆的纵横尺寸比,默认值是 1 即圆,如图三:


图三

三、颜色、前景与背景色的设置:
1、颜色函数 RGB()
在前面关于卷动条控件(综合示例五)的讲解中,我们讲述了色彩的设置问题,而这正是 RGB 颜色函数的原理所在。色彩设置的方法如下:

RGB(Red,Green,Blue)

不要忘了,Red、Green、Blue 每种色彩各有 0——255 种成份,三种色彩不同参数的搭配,就产生了丰富多采的现实世界。

2、前景色的设置:
通过对 ForeColor(前景色属性)的设置,可以返回或设置对象的前景色。

3、背景色的设置:
对 BackColor 属性进行设置,就可以返回或设置对象的背景色。

4、图形的清除:
用 Cls 方法可以清除窗体或图形框在程序运行中绘制的图形,语法如下:

对象名.Cls
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多